下面的程序不能运行,错哪了??(数据结构C语言版)

2025-05-16 21:28:02
推荐回答(3个)
回答1:

#include "stdio.h"
#include "malloc.h"
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef struct
{
int * elem;
int length;
int listsize;
}SqList;

int InitList_Sq(SqList *L)
{
L->elem = (int*)malloc(LIST_INIT_SIZE*sizeof(int));
if (!L->elem)
return ERROR;
L->length = 0;
L->listsize = LIST_INIT_SIZE;
return OK;
}

int ListInsert_Sq(SqList *L, int i,int e)
{
int *p,*newbase,*q;
if (i < 1 || i > L->length)
return ERROR;
if (L->length > L->listsize)
{
newbase = (int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof (int));
if (!newbase)
return ERROR;
L->elem = newbase;
L->listsize += LISTINCREMENT;
}
q=&L->elem[i];

for(p=&(L->elem[L->length-1]);p>=q;p--)
*(p+1)=*p;
*q=e;

return OK;
}

int ListDelete_Sq(SqList *L, int i, int *e)
{

int *p, *q;
if (i<1 || i>L->length)
return ERROR;
p = &(L->elem[i]);
*e = *p;
q = L->elem+L->length;
for(++p;p<=q;p++)
*(p-1)=* p;
L->length--;

return OK;
}

int ListLength_Sq(SqList L)//求顺序表的长度
{//实现此函数
int i;
i=L.length;
return i;
}

void PrintList_Sq(SqList L)//输出顺序表中的元素
{//实现此函数
int i;
if(L.length > 0)
{
printf("表中元素值:\n");
for(i=1;i<=L.length;i++)
{
printf("%d\n",L.elem[i]);
}
}
else
printf("空表!\n");
}

//顺序表应用
void Reverse_SeqList(SqList *PL)//顺序表逆置
{
int i ;
int x;
for(i=1;i<=PL->length/2;i++)
{
x=PL->elem[i];
PL->elem[i]=PL->elem[PL->length-i+1];
PL->elem[PL->length-i+1]=x;
}
}
int main()
{
SqList L; int e;
InitList_Sq(&L);
int n,j,choice,i;
printf("please Enter n(n<101):");
scanf("%d",&n);

for(i=1;i<=n;++i)
scanf("%d",&L.elem[i]);
L.length=n;

printf("1:插入,2:删除,3:表长,4:输出,5:逆置,0:结束\n");
scanf("%d",&choice);
while(choice!=0)
{
switch(choice)
{
case 1:
L.length++;
printf("输入的值e及其位置j:");
scanf("%d%d",&e,&j);
if(!ListInsert_Sq(&L, j, e))
printf("插入失败\n");
else
{
printf("插值后");
PrintList_Sq(L);
}
break;
case 2:
printf("输入删除的位置j:");
scanf("%d",&j);
if(!ListDelete_Sq(&L, j, &e))
printf("删除失败!\n");
else
printf("删除的元素为:%d\n",e);
break;
case 3:
int h;
h=ListLength_Sq(L);
printf("表长:%d\n",h);
break;
case 4:
PrintList_Sq(L);
break;
case 5:
Reverse_SeqList(&L);
printf("逆置后");
PrintList_Sq(L);
break;

}
printf("1:插入,2:删除,3:表长,4:输出,5:逆置,0:结束\n");
scanf("%d",&choice);
}
}

回答2:

结构体定义的有问题。
typedef struct List{
struct List * elem;
int length;
int listsize;
}SqList;

回答3:

可能内存泄露,额,很晚了。先睡觉,明天再看吧。