//reconsituition
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 10
typedef int datatyp;
//4.1.1 define a sequential list structure
typedef struct{
datatyp data[MAXSIZE];
int len;
}seqlist;
//4.1.2 create a sequential list in the heap area
seqlist *create(){
seqlist *list=(seqlist *)malloc(sizeof(seqlist));
if(list==NULL){
return NULL;
}else
list;
list->len=0;//there is no data in the data[],so len = 0
return list;
}
//determines whether the sequential list is full
int deterFull(seqlist *list){
return list->len==MAXSIZE?-1:0;
}
//determines whether the sequential list is empty
int deterEmpty(seqlist *list){
return list->len==0?-1:0;
}
//4.1.3add data after the last bit of the sequential list
int addDataAfterLast(seqlist *list,datatyp add){
if(deterFull(list)){
printf("sequential list have full,fail\n");
return -1;
}
list->data[list->len]=add;
list->len++;
return 0;
}
//4.1.4delete data after the last bit of the sequential list
int delDataAfterLast(seqlist *list){
if(deterEmpty(list)){
printf("sequential list is empty,fail\n");
return -1;
}
list->len--;
return 0;
}
//4.1.5insert data according to the subcript
int insertData(seqlist *list,int sub,datatyp add){
if(deterFull(list)||sub<0 || sub>list->len){
printf("sequential list is full or subcript is error\n");
return -1;
}
for(int i=list->len-1;i>=sub;i--){
list->data[i+1]=list->data[i];
}
list->data[sub]=add;
list->len++;
return 0;
}
//按下标删除
int del(seqlist *list,int sub){
if(deterEmpty(list)||sub<0||sub>=list->len||list->len==0){
printf("失败\n");
return -1;
}
for(int i=sub;i<=list->len-1;i++){
list->data[i]=list->data[i+1];
}
list->len--;
}
//按下标查找
int search_sub(seqlist *list,int sub){
if(deterEmpty(list)||sub<0||sub>=list->len){
printf("失败\n");
return -1;
}
printf("要查找的元素是:%d\n",list->data[sub]);
}
//按下标修改
int updata(seqlist *list,int sub,int v){
if(deterEmpty(list)||sub<0||sub>=list->len){
printf("失败\n");
return -1;
}
list->data[sub]=v;
}
//按元素查找
int search(seqlist *list,int ele){
int i;
if(deterEmpty(list)){
printf("查找失败\n");
return -1;
}
for(i=0;i<list->len;i++){
if(ele==list->data[i]){
return i;
}
}
printf("失败\n");
}
//按元素删除
void delEle(seqlist *list,int ele){
int sub;
sub=search(list,ele);
del(list,sub);
}
//按元素修改
void updataEle(seqlist *list,datatyp value,datatyp value1 ){
int sub;
sub=search(list,value);
updata(list,sub,value1);
}
//按元素插入(后继)
void insertDataAfter(seqlist *list,datatyp value,datatyp value1){
int sub;
sub=search(list,value);
insertData(list,sub+1,value1);
}
//顺序表排序
void swapSeq(seqlist *list){
int temp;
for(int i=0;i<list->len;i++){
for(int j=0;j<list->len-i-1;j++){
if(list->data[j]>list->data[j+1]){
temp=list->data[j];
list->data[j]=list->data[j+1];
list->data[j+1]=temp;
}
}
}
}
//释放顺序表
seqlist *Free(seqlist *list){
if(list==NULL){
return NULL;
}
return NULL;
}
int print(seqlist *list){
printf("curren data state:\n");
for(int i=0;i<list->len;i++){
printf("%d\t",list->data[i]);
// printf(" %d ",list->len);
}
putchar(10);
}
int main(void){
//receive the first address of sequential list
seqlist *list=create();
//add data after the last bit of ....
if(list==NULL){
printf("space application failure:\n");
return -1;
}
printf("Now,you can add up to ten numbers in turn to the data[]\n");
printf("please enter the number of data to add:\n");
int n1;
scanf("%d",&n1);
printf("enter these number in turn:\n");
datatyp add;
for(int i=0;i<n1;i++){
printf("the %d data is: ",i+1);
scanf("%d",&add);
addDataAfterLast(list,add);
}
//n1 data is added
print(list);
//delete the last of data
// delDataAfterLast(list);
// print(list);
//insert data according to the subcript
// printf("enter the subcript and data:");
int sub;
// scanf("%d%d",&sub,&add);
// insertData(list,sub,add);
// print(list);
//下标删除
// printf("输入删除的下标");
// scanf("%d",&sub);
// del(list,sub);
// print(list);
//按下标查找
// printf("查找的下标为:");
// scanf("%d",&sub);
// search_sub(list,sub);
//按下标修改
// printf("输入修改的下标和值:\n");
// scanf("%d%d",&sub,&add);
// updata(list,sub,add);
// print(list);
//按元素查找
// printf("输入查找的元素");
datatyp rs;
// scanf("%d",&rs);
// printf("查找元素的下标为%d\n",search(list,rs));
//按元素删除
printf("输入要删除的元素:");
scanf("%d",&rs);
delEle(list,rs);
print(list);
//按元素修改
int value;
// printf("输入修改的元素和修改后的值");
// scanf("%d%d",&rs,&value);
// updataEle(list,rs,value);
// print(list);
//顺序表按元素插入其后继位置
printf("输入插入的元素和插入后的值");
scanf("%d%d",&rs,&value);
insertDataAfter(list,rs,value);
print(list);
//顺序表排序
printf("排序后的顺序表为:\n");
swapSeq(list);
print(list);
//释放顺序表
Free(list);
list=NULL;
return 0;
}