提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、线性表(List):0个或多个数据结构的有限序列
  • 二、线性表的顺序存储结构
    • 1.顺序存储定义
    • 2.顺序存储方式
    • 3.顺序存储结构的插入与删除
  • 总结

一、线性表(List):0个或多个数据结构的有限序列

这里要强调几个关键的地方。
1.首先它是一个序列。也就是说,元素之间是有顺序的,若元素有多个,那么除了第一个没有前驱,最后一个没有后继,其余元素均有一个唯一前驱和一个唯一后继。
2.线性表强调的是有限的。而且计算机中处理的对象都是有限的。

二、线性表的顺序存储结构

1.顺序存储定义

线性表的顺序存储结构,指的是用一段地址连续的存储单元一次存储线性表的数据结构。

线性表的顺序存储示意图如下:

2.顺序存储方式

线性表的消息传出方式,就是在内存中找一块地,通过占位的方式,把一定的内存空间给占了,然后把相同数据类型的数据存放在这块空地中。c语言的一维数组即实现顺序存储结构。这占下的地的大小,就是线性表的最大存储容量。
接下来看线性表的顺序存储的结构代码:

代码如下(示例):

#define MAXSIZE 20        /*存储空间初始分配量*/
typedef int ElemType;     /*ElemType类型根据实际情况而定,这里以int为例*/
typedef struct
{ElemType data[MAXSIZE];/*数组存储数据元素,最大值为MAXSIZE*/int length;            /*线性表当前长度*/
}SqList;

这里,就能发现描述顺序存储结构需要三个属性:
1.存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。
2.线性表的最大存储容量:数组长度MAXSIZE。
3.线性表的当前长度:length。

注意:线性表的长度和数据长度是不一样的!

3.顺序存储结构的插入与删除

3.1获得元素的操作
对于线性表的顺序存储结构,若要实现GetElem操作,只需要将对应下标的数据返回即可。

int GetElem(SqList L,int i,ElemType *e)
{if(L.length==0||i<1||i>L.length)return 0;*e=L.data[i-1];return 1;
}

3.2插入操作
如果我们要实现ListInsert(*L,i,e),即在线性表L中的第i个位置插入新元素e。
那么很容易想到,若在表中插入一个数据,那么所插入位置之后每个元素都要向后移动。对于操作造成了一定的麻烦。
然后我们要考虑插入算法的思路:
■ 如果插入位置不合理,抛出异常;
■ 如果线性表长度大于等于数组长度,则抛出异常或动态增加容量;
■ 从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置;
■将要插入的元素填入位置i;
■表长+1;
代码如下:

/*初始条件:顺序线性表L已存在,1<=i<=ListLength(L)*/
/*操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1*/
int ListInsert(SqList *L,int i,ElemType e)
{int k;if (L->length==MAXSIZE)/*顺序线性表已满*/return 0;if (i<1 || i>L->length+1)/*当i不在范围内时*/return 0;if (i<=L->length)/*若插入数据位置不在表尾*/{for(k=L->length-1;k>=i-1;k--)/*将要插入位置后的数据元素向后移动一位*/L->data[k+1]=L->data[k];}L->data[i-1]=e;/*将新元素插入*/L->length++;return 1;
}

3.3删除操作
图示:

删除算法的思路:
■如果删除位置不合理,抛出异常;
■取出删除元素;
■从删除位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置;
■表长-1;
实现代码如下:

/*初始条件:顺序线性表L已存在,1<=i<=ListLength(L)*/
/*操作结果:删除L中第i个数据元素,并用e返回其值,L的长度减1*/
int ListDelete(SqList *L,int i,ElemType *e)
{int k;if (L->length==0)return 0;if (i<1 || i>L->length)return 0;*e=L->data[i-1];if (i<L->length){for(k=i;k<L-》lengt;k++0L->data[k-1]=L->data[k];}L->length--;return 1;
}

总结

线性表顺序存储结构的优缺点

部分内容转载于 程杰–《大话数据结构》

数据结构:线性表顺序存储相关推荐

  1. 数据结构—线性表顺序存储插入和删除操作

    线性表的操作:1.InitList(*L):初始化操作,建立一个空的线性表L 2.ListEmpty(L):判断线性表是否为空,如果为空,返回true,否则返回false 3.ClearList(*L ...

  2. 数据结构线性表顺序存储结构和主要算法实现

    (1) 线性表的定义. 零个或多个数据元素的有限序列 序列线性表中有直接后继元素,有且仅有一个直接后继,有且仅有一个直接前驱,数据元素之间的关系是一对一的关系 常用的List操作: Operation ...

  3. 数据结构--线性表顺序存储(顺序表)

    特点: 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素. 作用: 线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之 ...

  4. C语言数据结构线性表顺序存储结构(插入、删除、获取)

    一.代码 #include<stdio.h> #define MAXSIZE 20 /*存储空间初始分配量*/ #define OK 1 #define ERROR 0//元素数据类型,假 ...

  5. [数据结构]线性表——顺序存储

  6. 数据结构例程——线性表顺序存储的应用

    本文是数据结构基础系列网络课程(2):线性表中第6课时线性表顺序存储的应用中所讲的例程. 例:删除元素 问题:已知长度为n的线性表A采用顺序存储结构,设计算法,删除线性表中所有值为x的数据元素. 要求 ...

  7. 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码

    数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...

  8. 关于数据结构链表问题(C语言实现)—— 线性表顺序存储设计与实现

    这是我的第一篇博客(内容为废话) 现在马上面临毕业的我,发现整理总结问题真的非常重要,刚刚开始学习数据结构,并且非科班出身的我,感觉得到压力非常大,所以开始学习完后在这进行回忆,复习学习.在这里要感谢 ...

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

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

最新文章

  1. Navicat for MySQL连接MYSQL出错,错误代码1045的解决方法
  2. 全球及中国油气装备行业投资状况及运营前景研究报告2021版
  3. pd.read_csv时出现unnamed列
  4. xp python35.dll_python35.dll
  5. c++ array 模板类使用
  6. 苹果Swift语言入门教程【中文版】
  7. 面试官系统精讲Java源码及大厂真题 - 38 线程池源码面试题
  8. Codeforces 994 C - Two Squares
  9. mysql匿名账户登录导致的ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'错误...
  10. 朴素贝叶斯算法优缺点
  11. 数字图像处理(DIP)作业8 matlab or OpenCV 对lena 图片进行边缘提取
  12. 【无标题】安装 Debian 11 Bullseye – 一步一步的截图
  13. 敏涵控股集团成为2022第十二届公益节候选品牌
  14. web期末复习---老师划重点!!
  15. geoJson全国各省市地图json数据获取
  16. WinSetupFromUSB制作多系统U盘引导启动
  17. 学习linux压缩命令压缩文档
  18. idea springboot mybaits扫描不到第三方jar中的mapper
  19. 直流电机/步进电机/伺服电机 简介
  20. 计算机网络技术主要包括计算机技术和什么,《计算机网络技术》第6章作业的参考答案...

热门文章

  1. 两个类使用双冒号连接_C++中的双冒号作用
  2. JMeter测试遇到401错误
  3. 反弹球c语言小游戏编程,C语言实现反弹球小游戏
  4. bcnf分解算法_数据库规范化:模式分解算法(3NF,BCNF分解,附带口诀,通俗易懂)...
  5. python 模拟浏览器操作_python 使用 mechanize 模拟浏览器访问网页
  6. 8分钟带你学会SpringBoot整合Redis来实现缓存技术
  7. 内存中数据的存储和单位换算
  8. flv.js无法播放http-flv视频流(带音频)
  9. 只做macd二次金叉_一位金牌操盘手分享:MACD二次金叉实战心得,值得仔细读上十遍!...
  10. Qt的双缓冲技术(double buffering)