问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言顺序表的创建程序

发布网友 发布时间: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>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define Icreament 20
typedef int ElemType;  //用户自定义数据元素类型
typedef struct list{
ElemType *elem;  //顺序表的基地址
int length;  //顺序表的当前长度
int listsize;  //预设空间容量
}*SqList;  //线性表的顺序存储结构

SqList InitList() { //创建空的顺序表
SqList L;//定义顺序表L
L = (struct list *)malloc(sizeof(list)); // 这是必须的
L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if(L->elem == NULL){
printf("空间划分失败,程序退出。\n");
exit(!0); 
}
L->length = 0;
L->listsize = LIST_INIT_SIZE;
return L;
}

SqList CreateList(SqList L) { //创建顺序表(非空)
int number;  //顺序表中元素的个数
int i;  //循环变量
printf("请输入顺序表中元素的个数:");
scanf("%d",&number);
for(i = 0;i < number && i < L->listsize;i++) {
printf("输入第%d个数: ",i+1);
scanf("%d",&L->elem[i]);  
}//给顺序表中每个数据元素赋值
L->length = i;  //当前顺序表的长度
return L;
}

void print(SqList L) { //输出当前顺序表
int i;
for(i = 0;i < L->length;i++)
printf("%-3d",L->elem[i]);
printf("\n");
}

int main() {
SqList L = InitList();
CreateList(L);
print(L);
free(L->elem);
free(L);
return 0;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
CAD具体是学什么的 cad学什么专业好 CAD属于什么课型 文胸36/80是什么尺码 21.22.23.24.25.这5个数横竖家起来都要等于69 21.22.23.24.25.5个数字横竖等于69怎么做 已知递增的等差数列{an}满足a1=1,a3=a2²-4,则an=? 已知递增等差数列an的前n项和为Sn,a1=1,且a2+1,a4+1,S4成等比数列 求数... 金鱼吊兰有什么作用,可供观赏改善风水 金鱼吊兰是什么植物? datatype 在C语言中怎么使用 后便可以跟什么数据类型 datetype *elem 什么意思 c语言typedef struct {ElemType *elem}Sqlist; Sqlist C语言数据结构q=L.elem+L.length-1 和 q=&L.elem[L.length-1]是否表示同一个意思? 如图C语言中的 j=L->length L->elem[j]=L->elem[j-1]是什么意思。 C语言存储空间问题 sizeof(elem)的值为 C语言 读取线性表中的第i个元素,GetElem(struct Sqlist MyList, in 在c语言中S-&gt;elem[S-&gt;top]=x啥意思? C语言写的一个堆栈,s-&gt;elem语句输出的不是元素,而是地址。 c语言数据结构中ElemSet什么意思? C语言elemtype c语言链表L-&gt;elem[i-1]? C语言中 L-&gt;elem 和L.elem中L有什么不同,-&gt;和.用法有什么不同 请问哪位高手可以告诉我,邓丽君的歌曲:我只在乎你,我和你,小城故事,原乡人,奈何,星月泪痕的伴奏? 谁说梅花没有泪(伴奏版)歌词 求好看的欧美魔幻电影?要求是能在现有的播放器(暴风影音,风行网...)里找到得! 我有一个电台科技TPAD平板电脑下的电影不知道在那里 手机看电视 用什么软件 一定给分 在网吧用风行网下载到可移动磁盘中,然后回家用个人电脑用暴风影音打不开。请问是格式下错了,还是另有... 抚顺烤肉拌饭技术配方抚顺烤肉拌饭做法烤肉拌饭怎么做 应收账款抵押风险转移会计分录怎么做 华为手机现在什么价位 用过华为手机的来 如何PS出雾霾效果 能不能把照片ps做成雾霾效果 雾霾效果用PS怎么做 如何修出高大上的天空效果 汉语拼音有大小写吗 苹果6手机屏幕亮的部分长宽具体多少厘米?是否10.4厘米?求精确尺寸在线等,麻烦帮忙测量一下,感谢 辉哥电脑显示器多少钱? csgo没有自己想要的字怎么办? 三星GT19050参数 2014年三星智能手机性价比最高的是哪款? 三星手机S5830I 和三星手机I8160,哪儿个好,知道的说下 烧烤店名字,霸气的, 三星那款手机机型最好 带牛字的烤肉店名? 三星手机I800和I800U有什么区别? 南美白对虾夜晚在池子边刨坑是怎么回事儿? 南美白虾晚上靠岸边怎么办 三星8150的前置摄像头30万的像素怎么样啊?