当前位置: 首页 > news >正文

复习三:线性表

一、线性表定义

      线性表是具有 相同 数据类型的n (n   > 0 数据元素 有限序列 ,其中 n 为表长 n = 0
时线性表是一个空表 线性表是一种逻辑结构,顺序表与链表是存储结构
         线性表特点:
  1. 表中元素的个数有限
  2. 表中元素具有逻辑上的顺序性,表中元素有其先后次序。
  3. 表中元素都是数据元素,每个元素都是单个元素。
  4. 表中元素的数据类型都相同,这意味着每个元素占有相同大小的存储空间。
  5. 表中元素具有抽象性,即仅讨论元素间的逻辑关系,而不考虑元素究竟表示什么内容。

二、顺序表

        线性表的顺序存储又称顺序表。顺序表的特点是表中元素的逻辑顺序与其物理顺序相同;

        顺序表最主要的特点是 随机访问 即通过首地址和元素序号可在时间 0(1) 内找到指定的
元素 。顺序表的存储密度高, 每个结点只存储数据元素 。 顺序表逻辑上相邻的元素物理上也相邻, 所以 插入和删除操作需要移动大量元素
静态顺序表定义【用数组表示】

 动态顺序表定义【利用指针、malloc()函数】 初始动态分配语句

动态分配并不是链式存储、它同样属于顺序存储结构,物理结构没有变化,依然是随
机存取方式,只是分配的空间大小可以在运行时动态决定。

三、顺序表基本操作

(1) 插入操作
在顺序表L的第 i (l<=i<=L. length+1) 个位置插入新元素 e i 的输入不合法 则返回false, 表示插入失败 否则 将第 i 个元素及其后的所有元素依次往后移动一个位置 腾岀一个空位置插入新元素e, 顺序表长度增加1 , 插入成功 返回 true
最好情况∶在表尾插入(即 i=n+1),元素后移语句将不执行,时间复杂度为 O(1)。
最坏情况∶在表头插入(即i=1),元素后移语句将执行n次,时间复杂度为O(n)。
平均情况∶时间复杂度为 0(n )
(2) 删除操作
删除顺序表L中第 i (l<=i<=L. length) 个位置的元素 用引用变量 e 返回 i的输入不合法,则返回false;否则,将被删元素赋给引用变量e,并将第i+ l个元素及其后的所有
元素依次往前移动一个位置 ,线性表长度减一,返回true
最好情况 删除表尾元素(即 i =n) ,无须移动元素,时间复杂度为0(1)。
最坏情况 删除表头元素(即i=l),需移动除表头元素外的所有元素,时间复杂度为0(n)
平均情况:时间复杂度为O(n)

(3)按值查找(顺序查找)
在顺序表L中查找第一个元素值等于 e 的元素 并返回其位序
四、顺序表的链式表示
1、单链表:线性表的链式存储又称单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素。单链表结点结构如图2.3所示,其中data为数据域,存放数据元素;next为指针域,存放其后继结点的地址。
单链表中结点类型:

 

 

头结点和头指针的区分 不管带不带头结点 头指针都始终指向链表的第一个结点 而头结
点是带头结点的链表中的第一个结点 结点内通常不存储信息
2、单链表的创建
(1)头插法建立单链表:将新结点插入到当前链表的表头 即头结点之后

 

 

采用头插法建立单链表时,读入数据的顺序与生成的链表中的元素的顺序是相反的。每个结
点插入的时间为O1),设单链表长为n,则总时间复杂度为 O(n)
(2)尾插法建立单链表:将新结点插入到当前链表的表尾,为此必须增加一个尾指针r,使其始终指向当前链表的尾结点

 

3、双链表
双链表结点中有两个指针prior和next,分 别指向其前驱结点和后继结点,如图2.9所示

 

(1)双链表的插入
 
4、循环单链表
循环单链表和单链表的区别在于,表中最后一个结点的指针不是NULL,而改为指向头结点, 从而整个链表形成一个环,如图2.12所示。 在循环单链表中,表尾结点*r的 next 域指向L,故表中没有指针域为 NULL的结点,因此, 循环单链表的判空条件不是头结点的指针是否为空,而是它 是否等于头指针

 

5、循环双链表

由循环单链表的定义不难推出循环双链表。不同的是在循环双链表中,头结点的prior指 针还要指向表尾结点,如图2.13所示

 

在循环双链表L中,某结点*p为尾结点时,p->next==L;当循环双链表为空表时,其 头结点的 prior域和 next域都等于L
6、静态链表
静态链表借助数组来描述线性表的链式存储结构,结点也有数据域 data 和指针域 next,静态链表也要预先分配一块连续的内存空间

 

 

 


                                                         习题                

参考答案:C

 参考答案:A

相关文章:

  • C/C++语言100题练习计划 87——火柴棒等式(枚举实现)
  • 数仓架构演进
  • 约瑟夫问题对应算法的实现(思路分析) [Java][数据结构]
  • 深圳市第十二届职工技术创新运动会暨2022年深圳技能大赛—集成电路应用开发职业技能竞赛
  • 携职教育:对于想进入财务工作的人来说,第一个证考CPA还是CMA?
  • PostgreSQL 创建数据库、创建用户、赋予权限、创建表、主键总结
  • SynchroTrap:基于相似度的异常检测算法
  • 【微信小程序模板直接套用】微信小程序制作模板套用平台
  • 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-用户系统EP03
  • 适合开发者使用的6款浏览器,开发者工具很实用
  • 中国智能网联汽车信息安全分析2022案例征集
  • UEditorPlus v2.4.0发布 Word图片粘贴重构,功能样式优化
  • 2366. 将数组排序的最少替换次数
  • 牛客 NC26257 小雨坐地铁
  • 基于springboot+vue+elementui的游戏攻略分享平台
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 4. 路由到控制器 - Laravel从零开始教程
  • Django 博客开发教程 16 - 统计文章阅读量
  • HTML中设置input等文本框为不可操作
  • httpie使用详解
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • java2019面试题北京
  • MySQL QA
  • PHP 7 修改了什么呢 -- 2
  • php中curl和soap方式请求服务超时问题
  • scrapy学习之路4(itemloder的使用)
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • ubuntu 下nginx安装 并支持https协议
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Xmanager 远程桌面 CentOS 7
  • 百度地图API标注+时间轴组件
  • 测试开发系类之接口自动化测试
  • 关于List、List?、ListObject的区别
  • 前端性能优化——回流与重绘
  • 强力优化Rancher k8s中国区的使用体验
  • 驱动程序原理
  • 使用Swoole加速Laravel(正式环境中)
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • $forceUpdate()函数
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (003)SlickEdit Unity的补全
  • (Python第六天)文件处理
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (实战篇)如何缓存数据
  • (四)c52学习之旅-流水LED灯
  • (四)图像的%2线性拉伸
  • .Net Web项目创建比较不错的参考文章