#include<stdio.h>
#include<stdlib.h>
#define LISTSIZE 10//顺序表存储空间的初始分配量
#define LISTINCREMENT 5//顺序表分配空间的分配增量
typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;
int main(){
Sqlist l;
int i,e,m;
void initlist(Sqlist *l);
void showlist(Sqlist *l);
int listinsert(Sqlist *l,int i,int e);
int listdelete(Sqlist *l,int i);
initlist(&l);
for(i=0;i<l.listsize;i++){ l.elem[i]=i+1;l.length++;}
showlist(&l);
scanf("%d,%d",&i,&e);
listinsert(&l,i,e);
printf("\ninsert:");
for(m=0;m<l.length;m++) printf("%d,",l.elem[m]);
printf("\n");
scanf("%d",&i);
listdelete(&l,i);
printf("\nDeleted element:e=%d\n",e);
}
//初始化顺序表
void initlist(Sqlist *l){
l->elem=(int *)malloc(LISTSIZE*sizeof(int));
if(l->elem) {
l->length=0;
l->listsize=LISTSIZE;}
else printf("ERROR!内存分配失败\n");
}
//输出顺序表
void showlist(Sqlist *l){
int m;
printf("sqlist:");
for(m=0;m<l->length;m++) printf("%d,",l->elem[m]);
printf("\n");
}
//顺序表的插入
int listinsert(Sqlist *l,int i,int e){
int *p,*q,*newbase;
printf("\n在第%d个位置上,插入元素e=%d\n",i,e);
if(i<0||i>l->length+1) {printf("i值不合法!\n"); return -1;}
if(l->length>=l->listsize) {
newbase=(int *)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(int));
if(newbase){ l->elem=newbase;
l->listsize+=LISTINCREMENT; }
q=l->elem+i-1;
for( p=l->elem+l->length-1;
q<=p;p--) *(p+1)=*p;
*q=e;
l->length++;
}
else printf("ERROR!分配内存失败\n");
}
//顺序表的删除
int listdelete(Sqlist *l,int i){
int m,e;
int *q,*p;
printf("\n删除第%d个位置上的元素\n",i);
if(i<0||i>l->length+1) { printf("i值不合法!/n"); return -1;}
p=l->elem+i-1;
e=*p;
for(q=l->elem+l->length-1;q>=p;p++) *p=*(p+1);
l->length--;
printf("\ndelete:");
for(m=0;m<l->length;m++) printf("%d,",l->elem[m]);
printf("\n");
return e;
}