题目:编写一个程序,动态的创建一个顺序表。要求:顺序表的初始长度为10,向顺序表中输入15个整数,并打印出来;再删除顺序表中的第5个元素,打印出删除后的结果。
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 10
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef int ElemType; //便于方便后续更改数据类型
typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;
//参数L:Sqlist类型的指针
void initSqlist(Sqlist *L){
L->elem=(int *)malloc(Maxsize*sizeof(ElemType));
if(!L->elem){
printf("内存分配失败\n");
exit(0);
}
L->length=0;
L->listsize=Maxsize;
}
void InsertElem(Sqlist *L,int i,ElemType item){
ElemType *base,*insertPtr,*p;
if(i<1 || i>L->length+1) exit(0); //非法插入
if(L->length >= L->listsize){ //为表重新分配空间
base=(ElemType *)realloc(L->elem,(L->listsize+10)*sizeof(ElemType));
L->elem = base;
L->listsize = L->listsize+100;
}
insertPtr = &(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=insertPtr;p--){
*(p+1) = *p;
}
*insertPtr = item;
L->length++;
}
void Delelem(Sqlist *L, int i){
ElemType *delitem,*q;
if(i<1 || i>L->length) exit(0);
delitem = &(L->elem[i-1]);
q=L->elem + L->length-1;
for(++delitem;delitem<=q;++delitem) *(delitem-1) = *delitem;
L->length--;
}
int main(int argc, char *argv[]) {
Sqlist l;
int i;
initSqlist(&l);
for(i=0;i<15;i++){
InsertElem(&l,i+1,i+1);
}
printf("The content of the list is:\n");
for(i=0;i<l.length;i++){
printf("%d ",l.elem[i]);
}
Delelem(&l,5);
printf("\nDelete the fifth element:\n");
for(i=0;i<l.length;i++){
printf("%d ",l.elem[i]);
}
return 0;
}
运行结果: