用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时运行正确,一旦超过,就不运行。这个程序的目的是输入数据时不受数组的长度限制。 展开
#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时运行正确,一旦超过,就不运行。这个程序的目的是输入数据时不受数组的长度限制。 展开
3个回答
展开全部
楼主你好
修改如下:
#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)
希望能帮助你哈^_^
修改如下:
#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里面告诉你了 希望你明白了哈
展开全部
楼主定义的结构体中int*p;请问是干什么的?你给p申请空间干嘛呢??你最后存数据存子data[]里面,但是data长度只有5,所以只能存5个。。。。而且单步调试就会发现,在初始化的时候就会提醒你L没有初始化就使用啊。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void InitList(SeqList x) //定义顺序表的初始化函数
这里改成
void InitList(SeqList &x) //定义顺序表的初始化函数 加一个&
ps:若有不明白的地方,可以追问
这里改成
void InitList(SeqList &x) //定义顺序表的初始化函数 加一个&
ps:若有不明白的地方,可以追问
追问
改过了,n超过Maxsize时还是出错。只要n不超Maxsize就可以正常运行的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询