帮我看看插入和删除函数的定义有什么问题,运行不出来,谢谢了啦!
#include<stdio.h>
#include<stdlib.h>
#define LIS 100
#define LISTINCEMENT 10
typedef struct{
int *elem;
int length;
int listsize;
}sqlist;
void initsqlist(sqlist *l)/*初始化*/
{
l->elem=(int*)malloc(LIS*sizeof(int));
l->length=0;
l->listsize=LIS;
}
void creatlist(sqlist *l)/*创建*/
{
int i,n;
printf ("请输入线性表的长度n:\n");
scanf("%d",&n);
if (n<0||n>LIS) printf("error");
else
{
l->length=n;
printf("请输入数据元素:\n");
for(i=1;i<=l->length;i++)
scanf("%d",&l->elem[i]);
++l->length;
}
}
void printlist(sqlist *l)/*输出线性表 */
{
int i;
if(l->length<=0) printf("线性表为空表,请重新输入\n");
else
{
for(i=1;i<=l->length;i++)
printf("%3d",l->elem[i]);
++(l->length);
}
}
void listinsert_sq(sqlist *l,int i,int e)/*插入*/
{
int *p,*q;
int length;
printf("请输要插入的数e:\n");
scanf("%d",&e);
printf("请输插入位置i的值:\n");
scanf("%d",&i);
if((i<1)||(i>l->length+1)) printf("error\n");
else
q=&(l->elem[i-1]);
for(p=&(l->elem[length-1]);p>=q;--p) *(p+1)=*p;
*q=e;
++l->length;
printf("ok");
}
void listdelete_sq(sqlist *l,int i,int e) /*删除*/
{
int *p,*q;
printf("请输入删除位置i的值:\n");
scanf("%d",&i);
if((i<1)||(i>l->length)) printf("error");
p=&(l->elem[i-1]);
e=*p;
q=l->elem+l->length-1;
for(++p;p<=q;++p) *(p-1)=*p;
--(l->length);
}
void main()
{
sqlist l;
int s,i,e;
printf("请输入s的值(s=1时输出;s=2时插入;s=3时删除):\n");
scanf("%d",&s);
if(s==1)
{
initsqlist(&l);
creatlist(&l);
printlist(&l);
}
else if(s==2)
{
initsqlist(&l);
creatlist(&l);
listinsert_sq(&l,i,e);
printlist(&l);
}
else if(s==3)
{
initsqlist(&l);
creatlist(&l);
listdelete_sq(&l,i,e);
printlist(&l);
}
}