#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
enum {FALSE,TRUE};
typedef struct list_t{
int *data;
int cap;
int size;
}List;
int list_init(List **list,int len){
*list=malloc(sizeof(List));
if(*list==NULL){
return FALSE;
}
(*list)->data=malloc(sizeof(int)*len);
if((*list)->data==NULL){
return FALSE;
}
(*list)->cap=len;
(*list)->size=0;
return TRUE;
}
void list_destroy(List *list) {
assert(!list==NULL);
free(list->data);
free(list);
}
int list_insert(List *list,int i, const int *elem){
if(list==NULL||i<0||list->size<i){
return FALSE;
}
int k;
for(k=list->size;k>i;k--){
list->data[k]=list->data[k-1];
}
list->data[k]=*elem;
list->size++;
return TRUE;
}
int list_size(List *list){
return list->size;
}
int list_capa(List *list){
return list->cap;
}
void list_display(List *list){
assert(!list==NULL);
int i;
for(i=0;i<list->size;i++){
printf("%d ",list->data[i]);
}
printf("\n");
}
int list_del(List *list,int i,int *ret){
if(list==NULL||i<0||i>=list->size){
return FALSE;
}
int k;
*ret=list->data[i];
for(k=i;k<=list->size-2;k++){
list->data[k]=list->data[k+1];
}
list->size--;
return TRUE;
}
int main(int argc, char *argv[]) {
List *list =NULL;
int n;
printf("创建的顺序表的元素个数为:");
scanf("%d",&n);
list_init(&list,n);
int flag=1;
while(1){
if(!flag) break;
if(list_size(list)>=list_capa(list)){
printf("当前list的size已经不小于capaticy,无法再进行插入操作\n");
break;
}
int elem, i;
printf("当前list的capaticy为:%d\n",list_capa(list));
printf("当前list的size为:%d\n",list_size(list));
printf("请输入您插入的位置以及要插入的数据(以空格隔开):");
scanf("%d %d",&i,&elem);
list_insert(list,i,&elem);
printf("当前list数据为:");list_display(list);
printf("继续插入输入1,结束输入0 ") ;
scanf("%d",&flag);
}
int flag1=1;
while(1){
if(!flag1) break;
if(list_size(list)==0){
printf("当前list已无元素,无法再进行删除操作\n");
break;
}
printf("当前list数据为:");list_display(list);
printf("您要删掉第几个元素?(从第0个开始)");
int n2,ret;
scanf("%d",&n2);
if(list_del(list,n2,&ret)){
printf("第%d个元素已从顺序表中删除,它为%d\n",n2,ret);
}
printf("继续删除输入1,结束输入0 ") ;
scanf("%d",&flag1);
}
list_destroy(list);
}