1 /*******************************************************
  2 * @: Project:    (顺序)线性表数据结构演示
  3 * @: File:        main.c
  4 * @: Function: 提供(顺序)线性表操作的基本函数和方法
  5 * @: History:    2013年8月23日 09:16:56
  6 * @: Author:    Alimy
  7 *******************************************************/
  8
  9 /*******************************************************
 10 * @: 头文件包含
 11 *******************************************************/
 12 #include "list.h"
 13 #include <stdio.h>
 14 /*******************************************************
 15 * @:(外部)函数&(外部)变量声明
 16 *******************************************************/
 17 void printmenu(void);
 18
 19
 20 SqList List_1;
 21
 22
 23 /*******************************************************
 24 * @: 主函数
 25 *******************************************************/
 26 int main(void){
 27     ElemType e = 0;
 28     char keyvalue = 0;
 29     int idx = 0;
 30
 31     if(OK==InitList(&List_1)){
 32         //printListData(&List_1);
 33         printf("初始化链表完成, 按任意键进入主菜单 \n");
 34     }
 35     getch(); //等待按键,进入大循环
 36     while(1){
 37         system("cls");
 38         printmenu();
 39         fflush(stdin);
 40         scanf("%c",&keyvalue);
 41         //getchar();//去掉回车键的键值
 42         fflush(stdin);
 43         switch(keyvalue){
 44             case 'a':
 45                 printf("请输入你要插入的位置索引及要插入的数据\n");
 46                 scanf("%d%d",&idx,&e);
 47                 printf("你要插入数据的位置是 【%d】,要插入的数据是【%d】\n",idx,e);
 48                 InsertListElem(&List_1,idx,e);
 49                 printf("按任意键返回主菜单\n");
 50                 getch();
 51                 break;
 52
 53             case 'b':
 54                 printf("请输入你要删除顺序线性表中的元素的索引\n");
 55                 scanf("%d",&idx);
 56                 printf("你要删除数据的位置是 【%d】\n",idx);
 57                 if(OK==DeleteListElem(&List_1,idx,&e)){
 58                     printf("删除元素成功,被删除的元素值为 %d \n",e);
 59                 }
 60                 printf("按任意键返回主菜单\n");
 61                 getch();
 62                 break;
 63             case 'c':
 64                 printf("请输入你要得到顺序线性表中的元素的索引\n");
 65                 scanf("%d",&idx);
 66                 if(OK!=GetListElem(List_1,idx,&e)){
 67                     printf("获取元素失败,请检查相关输入是否符合操作条件\n");
 68                     }
 69                 else{
 70                     printf("获取到的元素是 %d \n",e);
 71                     }
 72                 printf("按任意键返回主菜单\n");
 73                 getch();
 74                 break;
 75             case 'd':
 76                 printf("请输入你要得到顺序线性表中的元素值\n");
 77                 scanf("%d",&e);
 78                 LocateListElem(&List_1,e);
 79                 printf("按任意键返回主菜单\n");
 80                 getch();
 81                 break;
 82             case 'e':
 83                 printf("当前顺序线性表的表长为【%d】\n",List_1.m_ListCurrentlength);
 84                 printf("按任意键返回主菜单\n");
 85                 getch();
 86                 break;
 87             case 'f':
 88                 InitList(&List_1);
 89                 printf("清除线性顺序表完成,按任意键返回主菜单\n");
 90                 getch();
 91                 break;
 92             case 'g':
 93                 printListData(&List_1);
 94                 printf("按任意键返回主菜单\n");
 95                 getch();
 96                 break;
 97             case 'h':
 98                 goto _end;
 99                 break;
100             default:
101                 printf("你的输入环节有误,清重新输入 \n");
102                 printf("按任意键返回主菜单\n");
103                 getch();
104                 break;
105
106
107
108
109         }
110
111
112
113
114     }
115
116 _end:
117 //    getchar();
118     return 1;
119 }
120
121
122 void printmenu(void){
123     printf("  【主菜单】: 清输入数据相应对应的操作\n");
124     printf("【a】: 在顺序线性表中插入元素\n");
125     printf("【b】: 在顺序线性表中删除元素\n");
126     printf("【c】: 在顺序线性表中得到元素\n");
127     printf("【d】: 在顺序线性表中定位元素\n");
128     printf("【e】: 获取当前顺序线性表的当前表长\n");
129     printf("【f】: 清除顺序线性表\n");
130     printf("【g】: 打印当前顺序线性表的所有数据\n");
131     printf("【h】: 退出当前程序\n");
132     printf("你需要执行的操作项是:  ");
133 }

  1 /*******************************************************
  2 * @: Project:    (顺序)线性表数据结构演示
  3 * @: File:        list.c
  4 * @: Function: 提供(顺序)线性表操作的基本函数和方法
  5 * @: History:    2013年8月23日 09:16:56
  6 * @: Author:    Alimy
  7 *******************************************************/
  8
  9 /*******************************************************
 10 * @: 头文件包含
 11 *******************************************************/
 12 #include "list.h"
 13 #include <stdio.h>
 14
 15 /*******************************************************
 16 * @: (外部&内部)变量及(外部&内部)函数声明及定义
 17 *******************************************************/
 18 StatusType GetListElem(SqList L,int i,ElemType* pe);
 19 StatusType InsertListElem(SqList *pL,int i, ElemType e);
 20 StatusType DeleteListElem(SqList *pL,int i, ElemType* pe);
 21 StatusType InitList(SqList* pL);
 22 StatusType IsListEmpty(SqList* pL);
 23 void printListData(SqList* pL);
 24 void LocateListElem(SqList* pL,ElemType e);
 25
 26
 27
 28 /*******************************************************
 29 * @: (外部&内部)变量及(外部&内部)函数声明及定义
 30 *******************************************************/
 31 /*
 32 * @: 得到顺序线性表的第i个元素,返回在ElemType *e 指向的内存中
 33 * @: 返回值 ERROR   获取元素失败
 34 *                        OK      获取元素成功
 35 */
 36 extern StatusType GetListElem(SqList L,int i,ElemType* pe){
 37     if((i>L.m_ListCurrentlength)||(i<=0)||(0==L.m_ListCurrentlength)){ // 序号大于表的当前长度或者序号小余等于0(线性表的序号从1开始)或者目前顺序表为空表
 38         return ERROR ;
 39     }
 40     else{
 41         *pe = L.m_data[i-1];
 42         return OK;
 43     }
 44 }
 45
 46 /*
 47 * @: 在pL指向的线性表中的第i个位置插入e
 48 * @: 返回值 ERROR   插入元素失败
 49 *                        OK      插入元素成功
 50 */
 51 extern StatusType InsertListElem(SqList *pL,int i, ElemType e){
 52
 53     int idx;
 54
 55 //    if((i>=pL->m_ListCurrentlength)||(i<0))    //如果要插入的位置大于或者等于当前线性表长度  或者i为负数, return ERROR
 56 //        return ERROR;
 57
 58     if((i>pL->m_ListCurrentlength+1)||(i<1)){    // 若插入位置参数大于当前表长加1(可以在表尾插入,即等于表长加1),或者i非正整数,return ERROR
 59
 60         //打印相关参数,分析失败原因
 61         printf("【插入位置有误,清检查参数】 \n");
 62         printf("插入位置 i = %d \n",i);
 63         printf("顺序表当前长度为 pL->m_ListCurrentlength = %d \n",pL->m_ListCurrentlength);
 64         return ERROR;
 65     }
 66     if(pL->m_ListCurrentlength == LIST_MAXSIZE){ //如果当前线性表长度等于最大长度, return ERROR
 67
 68         printf("【当前表长 = %d,最大表长 = %d ,顺序表已经满了无法执行插入操作】 \n",pL->m_ListCurrentlength,LIST_MAXSIZE);
 69         return ERROR;
 70     }
 71
 72 //    //搬移数据
 73 //    if(i==(pL->m_ListCurrentlength+1)){  // 若是在表尾插入
 74 //        pL->m_data[i-1] = e;
 75 //    }
 76 //    else{                                // 若不是在表尾插入
 77 //
 78 //        for(idx=pL->m_ListCurrentlength;idx>=i;idx--){
 79 //            pL->m_data[idx] = pL->m_data[idx-1];
 80 //        }
 81 //        pL->m_data[i-1] = e;
 82 //    }
 83 //
 84
 85     if(i!=(pL->m_ListCurrentlength+1)){     //若不是在表尾插入
 86         for(idx=pL->m_ListCurrentlength;idx>=i;idx--){
 87             pL->m_data[idx] = pL->m_data[idx-1];
 88         }
 89     }
 90
 91     pL->m_data[i-1] = e;    //无论是否是在表尾插入,这两个步骤都必须执行
 92     pL->m_ListCurrentlength++;
 93     printf("插入操作完成 \n");
 94
 95     return OK;
 96 }
 97
 98 /*
 99 * @: 删除pL指向的顺序表中的第i个元素,并将被删除的值存放在pe指向的内存空间
100 * @: 返回值 ERROR 删除元素失败
101 *                        OK    删除元素成功
102 */
103 extern StatusType DeleteListElem(SqList *pL,int i, ElemType* pe){
104     int idx;
105     if(0 == pL->m_ListCurrentlength){  //当前表为空表,无法执行元素删除操作 return ERROR
106         printf("顺序表当前表长为 %d,为空表,无法执行元素删除操作 \n");
107         return ERROR;
108     }
109
110     if((i<1)||(i>pL->m_ListCurrentlength)){ //i为非正整数或者 i大于当前表长,参数有误,无法执行元素删除操作 return ERROR
111         //打印相关参数,分析失败原因
112         printf("删除失败,请根据相关参数分析原因 \n");
113         printf("要删除的位置为 %d\n",i);
114         printf("顺序表当前表长为 %d \n",pL->m_ListCurrentlength);
115         return ERROR;
116     }
117
118     *pe = pL->m_data[i-1];  // 存储被删除的元素
119     if(i<pL->m_ListCurrentlength){  //若不是删除表尾的元素
120
121         for(idx = i; idx<pL->m_ListCurrentlength;idx++){ //搬移数据
122             pL->m_data[idx-1] = pL->m_data[idx];
123         }
124     }
125
126     pL->m_ListCurrentlength--; //若是删除表尾的元素,操作表长即可
127     return OK;
128 }
129
130
131 /*
132 * @: 初始化一个顺序表,初始化成功将得到一个空表
133 * @: 返回值 :OK   初始化顺序表成功
134 */
135 extern StatusType InitList(SqList* pL){
136
137     int idx = 0;
138
139     pL->m_ListCurrentlength = 0;
140     for(idx=0;idx<LIST_MAXSIZE;idx++){
141         pL->m_data[idx] = 0x00;
142     }
143
144     return OK;
145 }
146
147 /*
148 * @: 判断pL指向的顺序表是否为空表
149 * @: 返回值 :
150 *        OK  此线性表是空表
151 *        ERROR 此线性表不是空表
152 */
153 extern StatusType IsListEmpty(SqList* pL){
154
155     if(0 == pL->m_ListCurrentlength){
156         printf("当前表为空表\n");
157         return OK;
158     }
159
160     else{
161         printf("当前表不为空表\n");
162         return ERROR;
163     }
164 }
165
166 /*
167 * @: 打印当前顺序表的所有元素
168 * @: 返回值 : 无
169 */
170 extern void printListData(SqList* pL){
171
172     int idx;
173     if(0 == pL->m_ListCurrentlength){
174         printf("当前表为空表,没有什么好打印的 \n");
175     }
176
177     else{
178         printf("当前表的值为:\n");
179         printf("当前表长为:%d\n",pL->m_ListCurrentlength);
180         for(idx=1;idx<=pL->m_ListCurrentlength;idx++){
181             printf("pL_data[%d] = %d\n",idx-1,pL->m_data[idx-1]);
182         }
183     }
184
185     printf("\n");
186     printf("\n");
187
188 }
189
190 /*
191 * @: 定位pL指向的顺序表中是否有值为e的元素?
192 */
193 extern void LocateListElem(SqList* pL,ElemType e){
194     int idx = 1;
195
196     int exsit_flag = 0;
197     if(0==pL->m_ListCurrentlength){
198         printf("当前表为空表,无法查找 \n");
199         return;
200     }
201     for(idx=1;idx<=pL->m_ListCurrentlength; idx++){
202         if(e==pL->m_data[idx-1]){
203             printf("成功在顺序线性表中定位到该元素,位置是【%d】 ,值L->m_data[%d]为【%d】\n",idx,idx-1,pL->m_data[idx-1]);
204             exsit_flag = 1;
205         }
206
207     }
208
209     if(0==exsit_flag){
210         printf("抱歉,未能在顺序线性表中定位到该元素 \n");
211         }
212
213
214 }

 1 /*******************************************************
 2 * @: Project:    (顺序)线性表数据结构演示
 3 * @: File:        list.h
 4 * @: Function: 提供(顺序)线性表操作的数据结构定义及方法声明
 5 * @: History:    2013年8月23日 09:16:56
 6 * @: Author:    Alimy
 7 *******************************************************/
 8
 9 /*******************************************************
10 * @:头文件包含
11 *******************************************************/
12
13 #ifndef __LIST_H__
14 #define __LIST_H__
15
16
17 /*******************************************
18 * @: 数据结构定义
19 ********************************************/
20 #define LIST_MAXSIZE  20    //顺序表的最大表长
21 #define ElemType int
22 #define StatusType int
23
24 typedef struct {
25     ElemType m_data[LIST_MAXSIZE];    //数据存储
26     int m_ListCurrentlength ;         //顺序表的当前长度
27 }SqList;
28
29 //#define StatusType
30 #define OK    1
31 #define ERROR 0
32
33 /*******************************************
34 * @: 外部调用函数声明
35 ********************************************/
36
37 extern StatusType GetListElem(SqList L,int i,ElemType *pe); //获取表中的元素
38 extern StatusType InsertListElem(SqList *pL,int i, ElemType e); //在表中插入新的元素
39 extern StatusType DeleteListElem(SqList *pL,int i, ElemType* pe); //在表中删除特定位置元素
40 extern StatusType InitList(SqList* pL);    //初始化一个空的线性表
41 extern StatusType IsListEmpty(SqList* pL); //判断线性表是否为空表
42 extern void printListData(SqList* pL);//打印当前顺序表的所有元素
43 extern void LocateListElem(SqList* pL,ElemType e);  // 定位顺序线性表中的元素
44
45 extern int printf(const char *,...);
46
47
48
49
50
51 #endif  //  end of __LIST_H__

顺序线性表的时间复杂度考究:

  插入 & 删除 & 查找 等操作的平均时间复杂度都是O(n)

  读取 & 写入 操作等操作的平均时间复杂度收拾O(1)

多用于存取数据的应用。

..

转载于:https://www.cnblogs.com/alimy/p/3285134.html

[数据结构与算法] (顺序)线性表简单demo程序相关推荐

  1. 数据结构与算法(一) 线性表之顺序表

     线性表是一种最简单.最常用的数据结构,根据存储方式可以分为顺序表和链表.  顺序表: 顺序表指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存储结构或顺序映像(sequent ...

  2. 黑马程序员 C语言数据结构与算法之线性表(链表/栈/队列/顺序表)

    C语言 链表基础知识清晰讲解(黑马) 讲的蛮好,就是音质不太好,有时听不清讲的啥! [黑马]数据结构与算法之线性表(链表/栈/队列/顺序表)[配套源码 嘛蛋,看错了,这是java的... 文章目录 链 ...

  3. rsa算法c语言实现_数据结构与算法之线性表-顺序表实现(C语言版本)

    原文托管在Github: https://github.com/shellhub/blog/issues/52 数据结构与算法之线性表-顺序表实现(C语言版本) 前言 数据结构与算法是一个程序员必备的 ...

  4. 数据结构和算法基础--线性表

    数据结构和算法基础–线性表 数据结构 = 数据的逻辑结构+数据的存储结构+数据的运算 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-28ek7MfI-164242629 ...

  5. 从零开始学数据结构和算法(二)线性表的链式存储结构

    链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...

  6. 《数据结构与算法》——线性表顺序存储结构的插入与删除

    什么是线性表? 线性表是最基本.最简单.也是最常用的一种数据结构.线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列. 线性表中数据元素之间的关系是一对 ...

  7. 遗世蒹葭~小甲鱼~数据结构和算法_02~线性表

    线性表 顺序存储结构:数组 #define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int ...

  8. 大话数据结构 01 :顺序线性表

    1.完整代码 #include "stdio.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0#defi ...

  9. 数据结构与算法之线性表(超详细顺序表、链表)

    原创公众号:bigsai 文章已收录在 全网都在关注的数据结构与算法学习仓库 欢迎star 前言 通过前面数据结构与算法基础知识我么知道了数据结构的一些概念和重要性,那么我们今天总结下线性表相关的内容 ...

最新文章

  1. 改善C#程序的建议10:用Parallel简化Task
  2. mysql什么情况下使用索引
  3. java 图片刷新页面_js修改img的src属性刷新图片时的图片缓存问题
  4. ElasticSearch PPT-笔记
  5. 电影中的出品人,制片人
  6. 安卓androidstudio访问本地接口_安卓开发之数据存储在本地的四种方式
  7. 带有返回值的装饰器_如何使用带有工厂功能的装饰器
  8. matlab日期textscan,求助:在MATLAB里如何输入时间序列中的时间
  9. 27. PHP 文件创建/写入
  10. idea项目中的idea文件如何隐藏,以及不小心隐藏之后如何显示idea文件夹
  11. 如何从zabbix数据库中获取每日流量最大值
  12. MySQL8.0.22解压安装教程
  13. 51单片机带闹钟c语言程序,51单片机定时闹钟程序(带按键)
  14. php时间变时间戳,php 时间如何转换为时间戳
  15. 跟我一起走进内联汇编的世界
  16. 微信小程序开发实战1 微信小程序开发概述
  17. 不用刷新,用 dfuse 流式搜索提供即时用户体验
  18. java.sql.SQLException: Incorrect string value: ‘\xE6\xB5\x8B\xE8\xAF\x95...‘ for column ‘xxx‘
  19. 购买云服务器和搭建PHP环境,运行PHP个人网站
  20. 软件测试之linux环境搭建与操作Xshell、Xftp

热门文章

  1. 微信号也有加人涨粉规则和限制?
  2. 小白怎么入门自由职业?
  3. Qt——P25 QListWidget控件
  4. java年度总结自我认知,java自我评价
  5. java异常代码_Java异常(示例代码)
  6. 如何在SQL Server 2016中使用R合并和拆分CSV文件
  7. 对警报线程池的警报线程_检测和警报SQL Server代理丢失的作业
  8. Linux基础-06-vi编辑器
  9. Boostnote跨平台 Markdown 编辑器
  10. Oracle 安全性一