麻烦高手帮我看看(c语言)

帮我看看插入和删除函数的定义有什么问题,运行不出来,谢谢了啦!
#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);
}
}

#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=0;i<l->length;i++)/*i要从0开始,且不等于l->length*/
scanf("%d",&l->elem[i]);
//++l->length;//这里的就可以省略了

}

}
void printlist(sqlist *l)/*输出线性表 */
{
int i;
if(l->length<=0) printf("线性表为空表,请重新输入\n");
else
{
for(i=0;i<l->length;i++)
printf("%3d",l->elem[i]);
//++(l->length);//为什么输出后还要加一个++(l->length);不明白??
} putchar('\n');
}

void listinsert_sq(sqlist *l,int i,int e)/*插入*/
{
int *p,*q;
int length;
length=l->length;//要把length赋值为l->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; /* 如果没把length赋值为l->length,l->elem[length-1]就会报错*/
*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);
}
}

/*i,e都可以在子函数里定义,不需要传值!!
for循环写的太复杂了可以简化一下。*/
温馨提示:答案为网友推荐,仅供参考
相似回答