#include <stdio.h>
#include <stdlib.h>
#define Listinitsize 10//表的空间大小为10
typedef struct {
int *elem;
int length;//表的长度
int listsize;
}Sqlist;
int InitList_Sq(Sqlist *L)
{
L->elem=(int *)malloc((Listinitsize) * sizeof(int));//申请动态空间
if(! L->elem)
return(-1);
L->length=0;//线性表为空表
L->listsize=Listinitsize;
return 1;
}
int ListInsert_Sq(Sqlist *L,int i,int e)//进行插入操作
{
int *p,*q,*base;
if(i<1||i>L->length+1)return 0;
if(L->length>=L->listsize){
if(! base)return -1;
L->elem=base;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;--p) *(p+1)=*p;
*q=e;
++L->length;
return 1;
}
int ListDelete_Sq(Sqlist *L,int i)
{ //进行删除操作
int *p,*q;
if((i<1)||(i>L->length))//判断要删除的元素是否存在
return (-1);
p=&(L->elem[i-1]);
q=L->elem+L->length-1;
printf("被删除的元素是 %d \n",L->elem[i-1]);
for(++p;p<=q;++p)
*(p-1)=*p;
--L->length;
return 1;
}
int inputlist(Sqlist *L)
{
int i,*p;
p=L->elem;
printf("表的容量是\n");
scanf("%d",&L->length);
printf("\n");
printf("表中元素是:");
for(i=0;i<L->length;i++)
scanf("%d",(p+i));
return 1;
}
int display(Sqlist *L)//输出线性表
{ int i;
for(i=0;i<L->length;i++)
printf("%5d\n",*(L->elem++));
return 1;
}
int InitList_Sq(Sqlist *L);
int display(Sqlist *L);
int inputlist(Sqlist *L);
int ListInsert_Sq(Sqlist *L,int i,int e);
int ListDelete_Sq(Sqlist *L,int i);
main()
{
int i,choice, x;
Sqlist La;
InitList_Sq(&La);
inputlist(&La);
do{ //进行选择操作
printf("1 插入\n");
printf("2 删除\n");
printf("3 退出\n");
printf("请选择: ");
scanf("%d",&choice);
printf("\n");
switch(choice){ //如果选择1,进行插入操作
case 1:{
printf("i,x=");//i为插入位置,x为要插入的元素
scanf("%d,&d",&i,&x);//输入i,x的值
ListInsert_Sq(&La, i, x);//插入x
display(&La);}
break;
case 2:
{ //如果选择2,进行删除操作
printf("i=");
scanf("%d",&i);
ListDelete_Sq(&La,i);
display(&La);
}
break;}
}while
getchar();
}