由于数据结构放置了很久,对一些基本的操作有些遗忘,于是近期重新开启了数据结构的学习模式。本文只要讲述了顺序存储线性表的一些基本操作,对于老鸟老说可能偏简单,但是对于新手或者很久没碰线性表的读者来说,还是比较有价值的,代码我都一一调试过。且必要的地方,我也做了详细的注释,这样也为自己后期学习做了一个remark。欢迎有兴趣的小伙伴跟我在站内交流互动,后期我会持续更新。

这是我的学习代码:

#include "stdafx.h"
#include "malloc.h"
#include "stdio.h"#define MAXSIZE 20    //一般顺序线性表的最大长度是固定的
#define LIST_INI_LENGTH 5    //初始化时线性表的长度
#define OK 1
#define ERROR 0
#define TRUE 0
#define FALSE 0
typedef int Status;//函数的类型,其值是函数结果状态代码
typedef int ElemType;//定义线性表元素类型

typedef struct     //定义一个顺序存储结构类类型
{ElemType data[MAXSIZE];//线性表的数据元素int cur_length;//线性表的当前长度
}SqList;Status ListInitial(SqList *L)//线性表的初始化
{L =(SqList*) malloc(MAXSIZE*sizeof(SqList));//为线性表分配内存,注:这里一定要强制类型转换if (L == NULL)printf("初始化失败!");L->cur_length = 0;//初始化时线性表分配的长度//for (int i = 0; i < LIST_INI_LENGTH;i++)//    L->data[i] = 0;return OK;}Status ListCreate(SqList *L)//线性表的创建,一般发生在初始化之后
{int i, n=0;printf("请在键盘输入即将创建的线性表长度:\n");scanf_s("%d", &n);//读者可以尝试把这条语句改成scanf_s("%d\n", &n),看运行结果L->cur_length = n;printf("请在键盘输入即将创建的线性表中的元素:\n");for (i = 0; i <n; i++){scanf_s("%d", &L->data[i]);//注意小细节,读者可以把这条语句改成scanf_s("%d\n", &L->data[i]),然后分析运行结果
    }return OK;
}
Status ListClear(SqList *L)//线性表的清空
{int i;for (i = 0; i < L->cur_length; i++)L->data[i] = 0;L->cur_length = 0;return OK;
}Status ListDestory(SqList L)//线性表的销毁
{free(L.data);return OK;
}
Status ListInsert(SqList *L, int i, ElemType e)//在L中的第i个位置之前插入新的数据元素e,L的长度加1
{int k;if (L->cur_length == MAXSIZE)//顺序表已满return ERROR;if (i<1 || i>L->cur_length)//当插入位置i不在线性表范围内时return ERROR;if (i < L->cur_length)//若插入数据的位置不在表尾
    {for (k = L->cur_length - 1; k >= i - 1; k--)L->data[k + 1] = L->data[k];}L->data[i - 1] = e;//将新元素插入L->cur_length++;//新元素插入后,线性表的长度加1return OK;
}Status ListDelete(SqList *L, int i, ElemType *e)//删除线性表L的第i个元素,并用e返回其值,L的长度减1
{int k;if (L->cur_length == 0)return ERROR;if (i<1 || i>L->cur_length)//当删除位置i不在线性表范围内时return ERROR;*e = L->data[i - 1];if (i < L->cur_length)//若删除的数据的位置不在表尾
    {for (k = i; k<L->cur_length; k++)L->data[k-1] = L->data[k];}L->cur_length--;//删除元素后,线性表的长度减1return OK;
}Status GetElem(SqList L, int i, ElemType *e)//获得第i个元素的操作
{if (L.cur_length == 0 || i<1 || i>L.cur_length)return ERROR;*e = L.data[i - 1];return OK;
}
int main()//主测试函数
{SqList L1 = {NULL};//还可以定义为*L1Status ListInitial(SqList &L1);//初始化线性表printf("初始化后线性表的长度为:");printf("%d\n", L1.cur_length);ListCreate(&L1);//创建线性表
printf("当前线性表的长度为:");printf("%d\n", L1.cur_length);//SqList L2;
    ElemType f;ElemType a=1,b=2,e;ListInsert(&L1, 1, a); ListInsert(&L1, 2, b);printf("插入元素后输出当前的线性表的实际长度为:");printf("%d\n", L1.cur_length);ListDelete(&L1, 2, &f);printf("输出被删除的元素:");printf("%d\n", f);printf("删除元素后线性表的实际长度为:");printf("%d\n", L1.cur_length);printf("输出线性表最后剩下的元素:\n");for (int j = 0; j < L1.cur_length; j++){    printf("%d\n", L1.data[j]);}GetElem(L1, 2, &e);//获取线性表中的第二个元素printf("输出获取的第2个元素:");printf("%d\n", e);ListClear(&L1);//清空线性表,这个函数需要采用地址传递,而不能定义为Status ListClear(SqList L)printf("输出线性表此刻的长度:");printf("%d\n", L1.cur_length);return 0;
}

下面是根据键盘提示输入数据后,我创建的顺序线性表的长度为5,下面代码的具体运行结果,代码的运行过程我再这里就不赘述了:

初始化后线性表的长度为:0
请在键盘输入即将创建的线性表长度:
5
请在键盘输入即将创建的线性表中的元素:
1
2
3
4
5
当前线性表的长度为:5
插入元素后输出当前的线性表的实际长度为:7
输出被删除的元素:2
删除元素后线性表的实际长度为:6
输出线性表最后剩下的元素:
1
1
2
3
4
5
输出获取的第2个元素:1
输出线性表此刻的长度:0
请按任意键继续. . .

  本文为作者原创,欢迎转载,转载请注明出处。

转载于:https://www.cnblogs.com/huster666/p/5625804.html

线性表的总结:顺序存储线性表的初始化,创建,插入,删除,清空,销毁等操作...相关推荐

  1. python列表是顺序表还是链表_顺序表与链表

    Python中的顺序表 Python中的list和tuple两种类型采用了顺序表的实现技术,具有前面讨论的顺序表的所有性质. tuple是不可变类型,即不变的顺序表,因此不支持改变其内部状态的任何操作 ...

  2. 线性表的顺序存储 c语言表达,线性表的基本操作顺序存储(C语言).doc

    线性表的基本操作顺序存储(C语言) #include#include#include#define LIST_INIT_SIZE/*线性表存储空间初始分配量*/#define LISTINCREMEN ...

  3. 实验项目3——基本线性表运算(顺序存储方式)

    实验内容 [问题描述] 基本线性表经常进行的运算操作有创建基本线性表.求基本线性表的长度.在基本线性表中查找某个数据元素.在某个位置插入一个新数据元素.在某个线性表中删除某个数据元素以及基本线性表的输 ...

  4. 什么是线性表?什么是线性表的顺序存储结构?什么是线性表的链式存储结构?

    1.线性表是最简单也是最常用的一种数据结构.线性表的例子不胜枚举,例如,英文字母表就是一个线性表,表中的英文字母是一个数据元素. 2.线性表的定义:线性表是具有相同特性的数据元素的一个有限序列. 3. ...

  5. 数据结构学习笔记——线性表逻辑结构和顺序存储结构

    2.1线性表的逻辑结构  线性表的数据元素的特点:同一数据类型 一.线性表的逻辑定义 线性表是由n个数据元素(结点)a1,a2,-,an组成的有限序列. 二.线性表的基本运算 2.2线性表的顺序存储结 ...

  6. Linux下学C语言——第十六节 数据结构|顺序存储线性表

    逻辑:线性,树形,图,集合 (1)线性结构:线性结构中,元素间的关系就是一对一,顾名思义,一条线性的结构.线性表,栈,队列 (2)树形结构:树形结构中,元素间的关系就是一对多,一颗大叔,伸展出的枝叶, ...

  7. 2.1实现一个顺序存储的线性表(educoder数据结构线性表实训题)

    任务描述 本关任务:实现 step1/Seqlist.cpp 中的SL_InsAt.SL_DelAt和SL_DelValue三个操作函数,以实现线性表中数据的插入.删除与查找等功能. 相关知识 线性表 ...

  8. 线性表的动态顺序存储和实现(C语言实现)【线性表】(4)

    ElemType.h DynaSeqList.h DynaSeqList.cpp ElemType.cpp Lab.cpp 测试结果 注意 ElemType.h /*** *ElemType.h - ...

  9. 线性表之顺序存储-顺序表

    顺序表的操作 [x] 向有序顺序表插入一个元素 [x] 顺序表的冒泡排序 [x] 顺序表的删除操作 [x] 顺序表中元素的查找 [x] 顺序表的逆置 [x] 删除顺序表中的相同元素 [x] 向顺序表的 ...

  10. 线性表(一)——顺序表

    线性表(一) 线性表(linear list),也称有序表(ordered list),是线性结构的典型代表.数据元素之间仅具有单一的前驱和后继关系. 一.线性表的逻辑结构 1.线性表的定义 线性表简 ...

最新文章

  1. java事件处理模型_从零开始理解JAVA事件处理机制(3)
  2. 轻量级高精度人脸检测推荐
  3. linux 驱动程序 HelloWorld
  4. 回调函数的意义以及python实现
  5. C/C++位域结构深入解析
  6. NSArray和NSMutableArray对象的使用
  7. InstallSield更新包快速入门文档----感谢原作者ㄣ齊¨彡仯乄的无私提供
  8. 【MySQL】Java对SQL时间类型的操作(获得当前、昨天、前年。。时间)
  9. Java中Web程序修改配置文件不重启服务器的方法
  10. HDOJ2000(ASC||码排序)【sort函数】
  11. 使用Jasypt加密spring boot应用配置文件的敏感信息
  12. MVC项目开发中那些用到的知识点(MVC IModelBinder)
  13. Elasticsearch 之(33)document数据建模实战_文件搜索_嵌套关系_父子/祖孙关系数据...
  14. c++ static静态变量、静态函数
  15. Docker Kubernetes k8s 从入门到精通
  16. 程序员如何阅读英文文档
  17. lpx寒假作业案例9
  18. 防灾科技学院考研计算机,防灾科技学院考研难吗
  19. 追本溯源,回归根本:第一届区块链技术及应用峰会(BTA)·中国“区块链核心技术”分论坛预告大放送...
  20. 【深度好文】Python图像处理之物体标识与面积测量

热门文章

  1. P1081 开车旅行
  2. java 源码分析1 -String
  3. Maven 常用的命令
  4. 《超实用的HTML代码段》阅读笔记1——HTML5自动聚焦
  5. iOS常用第三方类库 Xcode插件
  6. Android Training精要(五)讀取Bitmap對象實際的尺寸和類型
  7. MySQL 03-MySQL安装-直接解压二进制文件(CentOS6)
  8. systemd和sysv服务管理和配置
  9. sudo执行脚本找不到环境变量
  10. 探索 Python、机器学习和 NLTK 库 开发一个应用程序,使用 Python、NLTK 和机器学习对 RSS 提要进行分类...