C语言写的一个线性表插入一个新元素程序,有点问题,请明白人指点!

来源:百度知道 编辑:UC知道 时间:2024/05/31 17:34:33
下面这个C程序在VC++6.0上编译、链接都没问题,就是运行时老是报错,不知道问题出在哪儿,请明白人帮忙指点一下。在此先谢谢了!

#include <stdio.h>
#include <stdlib.h>

#define OK 1
#define ERROR 0
#define MAXSIZE 20

typedef struct{
int elem[MAXSIZE];
int last;
}SeqList;

int InsList(SeqList *L,int i,int e)
{
int k;
if((i<1) || (i>L->last+2))
{
printf("插入位置i值不合法");
return(ERROR);
}
if(L->last >= MAXSIZE-1)
{
printf("表已经无法插入");
return(ERROR);
}
for(k=L->last; k>=i-1; k--)
L->elem[k+1] = L->elem[k];
L->elem[i-1] = e;
L->last++;
return(1);
}

void main()
{
int a[9] = {2,4,6,8,10,12,14,16,18};
SeqList *p=0;
for(int j=0;j<10;j++)
p->elem[j]=a[j];
InsList(p,4,9);
for(int s=0;s<p->last;s++)
printf("%d ",p->

SeqList *p=0;
这只是声明了一个SeqList类型的指针变量,而且你还让它为空了,当然出错.
应该是
SeqList p;
for(int j=0;j<10;j++)
p.elem[j]=a[j];
p.last=10;

int main()
{
int a[9] = {2,4,6,8,10,12,14,16,18};
SeqList *p=new SeqList; // 分配内存。
for(int j=0;j<10;j++)
{
p->elem[j]=a[j];
p->last = j; // 初始化大小
}
InsList(p,4,9);
for(int s=0;s<p->last;s++)
printf("%d ",p->elem[s]);
delete p;
return 0;
}

void main()
{
int a[10] = {2,4,6,8,10,12,14,16,18};
SeqList *p= (SeqList*) malloc(sizeof(SeqList));

for(int j=0;j<10;j++)
p->elem[j]=a[j];
p->last = 9;

InsList( p,4,9);
for(int s=0;s<p->last;s++)
printf("%d \n",p->elem[s]);
}