在上一篇博客中我们只是简单得了解了线性表的一些基本的概念。那么这一篇博客我们就来说说线性表的两种物理结构中的第一种—顺序存储结构。
一、顺序存储定义
线性表的顺序存储结构指的是用一段地址连续的存储单元依次线性表的数据元素。顺序存储的示意图如下:

二、线性表的地址计算方法
由于c语言的数组的下标是从0开始的,所以线性表第i个元素存储在第i-1的位置。如下图所示:

由于每个数据元素,不管它是整型还是字符型。都占有一定的存储单元空间。假设占用的是c个单位的存储单元。那么线性表中第i+1个元素的存储位置和第i个元素的存储位置满足以下条件。

LOC(a(i+1)) = LOC(ai) + c

则可以推断出第i个元素ai的位置由a1计算得出:

LOC(ai) = LOC(a1) + (i-1)*c

三、顺序存储结构的插入和删除等操作
1、获取元素(GetElem):既将线性表的第i个元素的下标返回。

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

2、插入操作(ListInsert):
(1)如果插入位置不合理,返回0;
(2)如果线性表长度大于等于数组长度,返回0;
(3)从最后一个元素开始向前遍 历到第i个位置,分别将它们都向后移动一个位置;
(4)将要插入元素填入位置i处;
(5)表长加1。
代码实现:

bool ListInsert ( SqList *L, int i, ElemType e )
{int k;if (L->length==MAXSIZE)/*顺序线性表已经满*/return false;if(i<1 || i>L->length+1) /*当i不在范围内时*/return false;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 true;
}

3、删除操作(ListDelete)
(1)如果删除位置不合理,return 0;
(2)取出删除元素;
(3)从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置;
(4)表长减1。
代码实现:

bool ListDelete (SqList *L,int i, ElemType *e)
{int k;if (L->length==0 )//线性表为空return false;if (i<1 || i>L->length)//删除位置不对return false;*e-L->data(i-1];if ( i<L->length )//如果删除不是最后位置{for (k=i;k<L->length;k++) //将删除位置后继元素后移L->data[k-1]=L->data [k];}L-> length--;return true;
}

四、顺序存储结构的优缺点
优点:1、不用为表中的元素之间的逻辑关系而增加额外的存储空间。
2、可以快速存取表中任意位置的元素。
缺点:1、删除和插入需要移动大量的元素。
2、当长度变化较大时无法确定存储空间的容量。

线性表顺序存储结构的基本实现相关推荐

  1. 第三章 线性表---顺序存储结构

    线性表(List):零个或多个数据元素的有限序列. 若将线性表记为(a1, ..., ai-1, ai , ai+1 , ..., an),则表中 ai-1 领先于ai , ai领先于ai+1,称ai ...

  2. 使用Java模拟线性表顺序存储结构

    在数据结构中,线性表分两种结构 顺序结构和链表结构 下面使用Java模拟一下顺序结构 主要难点在顺序结构的插入和删除 import java.util.ArrayList;//线性表顺序存储结构 pu ...

  3. 线性表 :: 顺序存储结构的实现

    线性表 :: 顺序存储结构的实现 说明:本文属于读书笔记.笔者将以讲述的方式表达全片文章.故文中提到的某些字词是非正式术语,只是笔者本人的理解性词语. 线性表简介:想要了解点击此处 目录 顺序存储结构 ...

  4. 线性表定义 线性表顺序存储结构

    写在前面:本文章来自于在学习过程中的总结,供大家参考.因水平有限,博客中难免会有不足,恳请大佬们不吝赐教! 文章目录 线性表的定义 线性表的顺序存储结构 线性表顺序存储结构的优缺点 线性表的基本操作 ...

  5. 线性表顺序存储结构操作算法

    线性表顺序存储结构操作算法 ** 顺序表的初始化 线性表的插入算法 线性表的删除算法 线性表的查找算法** 根据书本的知识线性表顺序存储结构的操作算法其实是我们刚进入数据结构与算法的必修课 其实算法无 ...

  6. 线性表-顺序存储结构

    线性表-顺序存储结构 线性表基本概念: 线性结构的基本特征为: 集合中必存在唯一的一个"第一元素": 集合中必存在唯一的一个 "最后元素" : 除最后元素在外, ...

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

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

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

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

  9. 线性表顺序存储结构图书管理

    线性表顺序存储结构图书管理 一开始看书里面的线性表的顺序存储结构,感觉简单,觉得动态链表才能做出一点东西,但是顺序存储不仅于此,也能做出来.顺序结构相比链式结构,内容上有较大差异,各有难点 文章目录 ...

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

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

最新文章

  1. 32树莓派_你觉得树莓派的32位系统到了2038年会出现故障吗?
  2. ecshop的商品列表输出中多出一条空记录
  3. 华为交换机常用命令介绍
  4. 我的年龄又快被5整除了......
  5. java开发名言_程序员名言语录
  6. Linux进程实践(4) --wait避免僵尸进程
  7. 信息系统项目管理师:第5章:项目范围管理- 章节真题+解析
  8. java dao service实例_浅谈Action+Service +Dao 功能
  9. JBox2d入门学习一
  10. 【Flink】Flink CDC 数据同步 【视频笔记】
  11. 云架构化-设计理念参考
  12. Linux学习笔记三:安装VMWare Tools共享文件夹
  13. duilib列表list使用方法
  14. java实现定时自动打卡脚本_android 定时自动上班手机打卡签到实例
  15. html基础dw,HTML基础DW使用教程
  16. word排版----分节、页眉页脚、页码、制作标题样式
  17. JVM--藤原豆腐店自用
  18. SaltStack常用的模块
  19. pico的学习之路(四)——HC-SR501人体感应模块(树莓派pico实现)
  20. 看完涨薪2K+_____2019 JAVA 必刷面试题

热门文章

  1. 基于微信新冠疫苗预约小程序设计与实现 开题报告
  2. 使用Squish自动化测试Qt APP心得
  3. 【蓝桥杯选拔赛真题55】Scratch昼夜变换 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解
  4. html php单选框,html单选框选中状态 html 怎么设置单选框的样式
  5. 【java基础04:注释 关键字 标识符 字面值 字节】
  6. UE4 线性插值 lerp
  7. verilog偶校验码实现
  8. 数据结构 : 单链表 头插入法尾插入法 及几种常用操作
  9. MVC设计模式与JavaWeb的三层架构
  10. SAP系统管理中常见问题解答(转载)