发布网友 发布时间:2022-05-10 22:53
共2个回答
热心网友 时间:2023-11-10 08:52
/*
*程序不足之处:1,main函数不应该为 void main
* 2,创建空的顺序表函数中 SqList L;//定义顺序表L L是局部变量,
函数结束即销毁,应该用指针代替
* 3,SqList CreateList(SqList L) //创建顺序表(非空)函数中:
scanf("%d",&L.elem); L里面的elem本来就是地址,
没必要 再加&符号,且每次输入都一直放在首地址,
没达到程序所要表达的意思
* 4,void print(SqList L) //输出当前顺序表 函数中:
printf("%-3d",L.elem); 和上面是一样的道理
* 5,main函数中没有将申请的内存释放
*现将程序稍作修改如下,望采纳
*/
#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define Icreament 20
typedef int ElemType; //用户自定义数据元素类型
typedef struct
{
ElemType *elem; //顺序表的基地址
int length; //顺序表的当前长度
int listsize; //预设空间容量
}SqList; //线性表的顺序存储结构
SqList* InitList() //创建空的顺序表
{
SqList* L = (SqList*)malloc(sizeof(SqList));//定义顺序表L
if(!L)
{
printf("空间划分失败,程序退出\n");
return NULL;
}
L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L->elem)
{
printf("空间划分失败,程序退出\n");
return NULL;
}
L->length=0;
L->listsize=LIST_INIT_SIZE;
return L;
}
int CreateList(SqList* L) //创建顺序表(非空)
{
int number; //顺序表中元素的个数
int i; //循环变量
printf("请输入顺序表中元素的个数:");
scanf("%d",&number);
if(number > LIST_INIT_SIZE) //一定要判断输入的个数是否大于顺序表的最大长度
{
printf("输入个数大于顺序表的长度\n");
return 0;
}
for(i=0;i<number;i++)
{
printf("输入第%d个数: ",i+1);
scanf("%d",L->elem+i); //L->elem+i:每次的输入都保存在顺序表元素中的下一个地址,而不是一直放在元素的首地址
}//给顺序表中每个数据元素赋值
L->length=number; //当前顺序表的长度
return 1;
}
void print(SqList* L) //输出当前顺序表
{
int i;
for(i=0;i<L->length;i++)
{
printf("%-3d",*(L->elem + i)); //L->elem+i:和输入是一个道理
}
printf("\n");
}
int main()
{
SqList* L = InitList(); //申请一个指向顺序表的指针,并对其初始化
if(!L) //判断申请是否成功
{
printf("初始化线性表失败\n");
return 1;
}
if(!CreateList(L)) //判断创建顺序表是否成功
{
printf("创建顺序表失败\n");
return 1;
}
print(L); //打印顺序表
free(L->elem); //释放申请的顺序表元素的内存
free(L); //释放申请的顺序表内存
return 0;
}
运行效果如图:
热心网友 时间:2023-11-10 08:53
/*
请输入顺序表中元素的个数:10
输入第1个数: 23
输入第2个数: 56
输入第3个数: 89
输入第4个数: 21
输入第5个数: 54
输入第6个数: 87
输入第7个数: 69
输入第8个数: 58
输入第9个数: 47
输入第10个数: 55
23 56 89 21 54 87 69 58 47 55
Press any key to continue
*/
#include<stdio.h>