用C语言建立一个顺序表,输入n个数并输出。程序编译没错,但运行不了,求指教。程序如下:

#include<stdio.h>#include<malloc.h>#defineMaxSize5//顺序表存储空间的初始分配量typedefstruct{int*p;... #include<stdio.h>
#include<malloc.h>
#define MaxSize 5 //顺序表存储空间的初始分配量
typedef struct
{
int *p;
int data[MaxSize];
int length;
int listsize;
}SeqList;
void InitList(SeqList x) //定义顺序表的初始化函数
{
x.p=(int*)malloc(MaxSize*sizeof(int));
if(!x.p) printf("存储分配失败!");
x.length=0;
x.listsize=MaxSize;
}
int main()
{
SeqList L;
InitList(L);
int i,n,k;
printf("请输入顺序表的长度n:");
scanf("%d",&n);
if(n<=0)
{
printf("数据错误!\n");
return 0;
}
if(n>MaxSize)
{
L.p=(int*)realloc(L.p,n*sizeof(int));
if(!L.p)printf("存储空间扩展失败!\n");
L.listsize=n;
}
printf("请输入数据:");
for(i=0;i<=n-1;i++)
{
scanf("%d",&k);
L.data[i]=k;
L.length++;
}
printf("线性表为:");
for(i=0;i<=n-1;i++)
printf("%d ",L.data[i]);
printf("\n");
return 1;
}
顺序表长度不大于Maxsize时运行正确,一旦超过,就不运行。这个程序的目的是输入数据时不受数组的长度限制。
展开
 我来答
未来需努力点缀
推荐于2017-11-25 · TA获得超过4679个赞
知道大有可为答主
回答量:850
采纳率:50%
帮助的人:530万
展开全部
楼主你好
修改如下:
#include<stdio.h>
#include<malloc.h>
#define MaxSize 40 //顺序表存储空间的初始分配量 --> (1)可以将MaxSize调大点儿
typedef struct
{
int *p;
int data[MaxSize];
int length;
int listsize;
}SeqList;
void InitList(SeqList &x) //定义顺序表的初始化函数
//--> (2)这里应该是SeqList &x 需要址传递 值传递是不会改变实参值的
{
x.p=(int*)malloc(MaxSize*sizeof(int));
if(!x.p) printf("存储分配失败!");
x.length=0;
x.listsize=MaxSize;
}
int main()
{
SeqList L;
InitList(L);
int i,n,k;
printf("请输入顺序表的长度n:");
scanf("%d",&n);
if(n<=0)
{
printf("数据错误!\n");
return 0;
}
if(n>MaxSize)
{
L.p=(int*)realloc(L.p,n*sizeof(int));
if(!L.p)printf("存储空间扩展失败!\n");
L.listsize=n;
}
printf("请输入数据:");
for(i=0;i<=n-1;i++)
{
scanf("%d",&k);
L.data[i]=k;
L.length++;
}
printf("线性表为:");
for(i=0;i<=n-1;i++)
printf("%d ",L.data[i]);
printf("\n");
return 1;
}

请看注释(1)(2)

希望能帮助你哈^_^
追问
注释(1):我是故意把Maxsize设得这么小的,就是想看看当输入n超过Maxsize是会怎样。
注释(2):没加&时,只要n不超Maxsize还是可以正常运行的,超过就不行了。
追答
你好  在百度hi里面告诉你了  希望你明白了哈
晓晨之巅
2012-10-08 · 超过10用户采纳过TA的回答
知道答主
回答量:48
采纳率:100%
帮助的人:27.6万
展开全部
楼主定义的结构体中int*p;请问是干什么的?你给p申请空间干嘛呢??你最后存数据存子data[]里面,但是data长度只有5,所以只能存5个。。。。而且单步调试就会发现,在初始化的时候就会提醒你L没有初始化就使用啊。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
283802332
2012-10-08 · TA获得超过3310个赞
知道小有建树答主
回答量:367
采纳率:0%
帮助的人:176万
展开全部
void InitList(SeqList x) //定义顺序表的初始化函数

这里改成
void InitList(SeqList &x) //定义顺序表的初始化函数 加一个&

ps:若有不明白的地方,可以追问
追问
改过了,n超过Maxsize时还是出错。只要n不超Maxsize就可以正常运行的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式