数据结构中的线性表的顺序实现,为了简化,数据元素是int:
#include<stdio.h>
#include<stdlib.h>
typedef struct {
int *elem;
int length;
int size;
}Sqlist;
int main(){
int InitSqlist(Sqlist *);
int ListInsert(Sqlist *,int ,int );
int ListDelete(Sqlist *,int ,int *);
Sqlist l,*lp=&l;
InitSqlist(lp);
ListInsert(lp,1,1);
ListInsert(lp,2,2);
ListInsert(lp,3,3);
printf("%d\n%d\n",l.length,l.size);
printf("%d\n%d\n%d\n",l.elem[0],l.elem[1],l.elem[2]);//lp->elem[0];
int shang,*s=&shang;
ListDelete(lp,2,s);
printf("被删除的是:%d\n",shang);
printf("%d\n%d\n",l.length,l.size);
printf("%d\n%d\n%d\n",l.elem[0],l.elem[1],l.elem[2]);
free(lp->elem);
return 0;
}
int InitSqlist(Sqlist *lp){
lp->elem=(int*)malloc(100*sizeof(int));
if(!lp->elem){
exit(1);
}
lp->length=0;
lp->size=100;
return 1;
}
int ListInsert(Sqlist *lp,int i,int e){
if(i<1||i>lp->length+1){
printf("here");
return 0;
}
if(lp->length>=lp->size){
int *newbase=(int*)realloc(lp->elem,(lp->size+10)*sizeof(int));
if(!newbase){
exit(1);
}
lp->elem=newbase;
lp->size+=10;
}
int *q=&(lp->elem[i-1]);
for(int *p=&(lp->elem[lp->length-1]);p>=q;--p){
*(p+1)=*p;
}
*q=e;
lp->length++;
return 1;
}
int ListDelete(Sqlist *lp,int i,int *e){
if((i<1)||(i>lp->length)){
return 0;
}
int *p=&(lp->elem[i-1]);
*e=*p;
int *q=&(lp->elem[lp->length-1]);
for(++p;p<=q;++p){
*(p-1)=*p;
}
--lp->length;
return 1;
}
运行结果:
3
100
1
2
3
被删除的是:2
2
100
1
3
3
--------------------------------
Process exited after 2.223 seconds with return value 0
请按任意键继续. . .