有没有人能帮我写一个“建立一个空线性表,给线性表赋值,实现插入、删除操作”的程序,数据结构c语言版的
# include<stdio.h>
# include<stdlib.h>
# define LIST_INIT_SIZE 100
# define LISTINCREMENT 10
# define OVERFLOW -2
# define OK 1
# define ERROR 0
typedef int ElemType;
typedef struct Sqlist
{
ElemType *elem;
int length;
int listsize;
}Sqlist;
void main()
{
Sqlist L;
int i,j,e;
Sqlist InitList_Sq();
int ListInsert_Sq(Sqlist L,int i,ElemType e);
int ListDelete_Sq(Sqlist L,int i);
int PutList(Sqlist L);
L=InitList_Sq();
printf("线性表为:\n");
PutList(L);
printf("输入插入的位置i:\n");
scanf("%d",&i);
printf("输入插入的值:\n");
scanf("%d",&e);
ListInsert_Sq(L,i,e);
printf("线性表为:\n");
PutList(L);
printf("输入删除的位置i:\n");
scanf("%d",&j);
ListDelete_Sq(L,j);
printf("线性表为:\n");
PutList(L);
}
Sqlist InitList_Sq()
{
Sqlist L;
int i;
ElemType* newbase;
L.elem=(ElemType*)malloc(LIST_INIT_SIZE *sizeof(ElemType));
if(!L.elem)
exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
printf("请输入表中的数据:\n");
for(i=0;;i++)
{
scanf("%d",L.elem[i]);
++L.length;
if(L.length>L.listsize)
{
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
}
return L;
}
int ListInsert_Sq(Sqlist L,int i,ElemType e)
{
ElemType *p,*q,*newbase;
if(i<1||i>L.length+1)
return ERROR;
if(L.length>=L.listsize)
{
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&L.elem[i-1];
for(p=&L.elem[L.length-1];p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
int ListDelete_Sq(Sqlist L,int i)
{
ElemType e,*p,*q;
if(i<1||i>L.length)
return ERROR;
p=&L.elem[i-1];
e=*p;
q=&(L.elem[L.length-1]);
for(++p;p<=q;++p)
*(p-1)=*p;
--L.length;
printf("删除的元素为:\n%d\n",e);
return OK;
}
int PutList(Sqlist L)
{
int *p,*q;
p=L.elem;
q=L.elem+(L.length-1);
for(p=L.elem;p<=q;++p)
{
printf("%d",*p);
}
return OK;
}
程序不能运行,可不可以告诉我问题出在哪儿?实在是搞不懂数据结构要怎么写