专题二-线性表
来源:互联网 发布:php nodejs 共存 编辑:程序博客网 时间:2024/05/20 23:33
线性表的本质
线性表的定义
(1)线性表(List)是零个或多个数据元素的集合;
(2)线性表中的数据元素之间是有顺序的;
(3)线性表中的数据元素个数是有限的;
(4)线性表中的数据元素类型必须相同。
线性表的定义
线性表是具有相同类型的n(>=)个数据元素的有限序列,(a1,a2,...,an),ai是表项,n是表长度。
线性表的性质
(1)a0为线性表的第一个元素,只有一个后继;
(2)an为线性表的最后一个元素,只有一个前驱;
(3)除a0和an外的其他元素ai,既有前驱,又有后继;
(4)线性表能够逐项访问和顺序存取。
小结
(1)线性表是数据元素的有序并且有限的集合;
(2)线性表中的数据元素必须是类型相同的;
(3)线性表可用于描述“队列类型”关系的问题。
线性表的相关操作
线性表的讨论
学生A:线性表可以说是生活“队列关系”的总结。
学生B:对,我们学习之后就可以在程序中使用了。
学生A:可是怎样使用一个线性表呢?
学生B:确实!还有就是程序中怎样生成一个线性表呢?
问题:(1)线性表是一个单纯的概念吗?
(2)如何在程序中使用一个线性表?
1.集合--创建线性表
2.解散--销毁线性表
3.长度--得到线性表的长度
4.出列--从线性表删除一个元素
5.添加--在线性表特定的位置添加元素
线性表的操作:
线性表的一些常用操作:(1)创建线性表
(2)销毁线性表
(3)清空线性表
(4)将元素插入线性表
(5)将元素从线性表中删除
(6)获取线性表中某个位置的元素
(7)获取线性表的长度
线性表操作的实现 :
(1)线性表在程序中表现为一种特殊的数据类型;
(2)线性表的操作在程序中的表现为一组函数。
用C语言描述线性表
小结:
(1)线性表在程序中表现为一种特殊的数据类型
(2)线性表的操作则表现为一组数据相关的函数
问题:(1)线性表的各个函数如何实现呢?
(2)有几种线性表的的实现方式呢?
(3)每种实现方式的优缺点是什么呢?
线性表的顺序存储结构
顺序存储结构:
书序存储的定义:线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
在C语言中可以使用一维数组来实现顺序存储结构
(1)存储空间的起始位置:数组node
(2)线性表的最大容量:数组长度MAXSIZE
(3)线性表的当前长度:length
获取元素操作:
(1)判断线性表是否合法
(2)判断位置是否合法
(2)判断位置是否合法
(3)直接通过数组下标的方式获取元素
插入元素操作
插入元素算法:
(1)判断线性表是否合法
(2)判断插入位置是否合法
(3)把最后一个元素到插入位置的元素后移一个位置
(4)将新元素插入
(5)线性表长度加一。
删除数据元素
删除数据元素算法:
(1)判断线性表是否合法
(2)判断删除位置是否合法
(3)将元素取出
(4)将删除位置后的元素分别向前移动一个位置
(5)线性表长度减一
创建可复用线性顺序表(产品级代码质量)
小结
优点:无需为线性表中的逻辑关系增加额外的空间;
可以快速的获取表中的合法位置元素
缺点:插入和删除操作需要移动大量的元素
当线性表长度变化较大时难以确定存储空间的元素。
线性表的链式存储结构
顺序表的思考:顺序表的最大问题是插入和删除需要移动大量的元素!如何解决?
学生A:在线性表数据元素之间空出位置,为以后插入使用。
学生B:这样不行!中间无论空多少都有可能用完!
学生A:那不是无解了嘛!
学生B:我觉得让每个元素都知道他的下一个元素就行了,哪有空插哪。
链式存储结构
链式存储定义:为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息。
n个节点链接成一个链式线性表的结构叫做链表,当每个节点中只包含一个指针域时,叫做单链表。
链表的基本概念
表头节点:链表中的第一个节点,包含指向第一个数据元素的指针以及链表自身的一些信息。
数据节点:链表中代表数据元素的节点,包含指向下一个数据元素的指针和数据元素的信息。
尾节点:链表中的最后一个数据元素节点,其下一元素指针为空,表示无后继。
在C语言中可以用结构体来定义链表中的指针域
链表中的表头结点也可以用结构体来实现
获取第POS个元素操作
(1)线性表是否合法
(2)判断位置是否合法
(3)由表头开始通过next指针移动pos次后,当前元素的next指针即指向要获取的元素
插入元素到位置POS的算法
(1)判断线性表是否合法
(2)判断插入位置是否合法
(3)由表头开始通过next指针移动pos后,当前元素的next指针指向要插入的位置
(4)将新元素插入
(5)线性表长度加一
删除第POS个元素的算法
(1)判断线性表是否合法
(2)判断插入位置是否合法
(3)获取第POS个元素
(4)将第POS个元素从链表中删除
(5)线性表长度减一
创建可复用的单链表(产品级质量)
头插法,尾插法
小结:
优点:(1)无需一次性定制链表的容量
(2)插入和删除操作无需移动数据元素
缺点:(1)数据元素必须保存后继元素的位置信息
(2)获取指定数据的元素操作需要顺序访问之前的元素
0 0
- 专题二-线性表
- 专题二-可复用顺序线性表
- 数据结构与算法专题之线性表——链表(二)双向链表
- 【数据结构专题】线性表之顺序表
- 数据结构专题——线性表
- 线性表专题(未完待续)
- 【数据结构专题】线性表之单链表
- 线性表基础知识(二)
- 线性表(二)
- 线性表(二)
- 线性表(二)
- 线性表习题二
- 二、线性表
- (二)线性表
- 线性表(二)
- 线性结构------线性表(二)
- 数据结构第三次实验——线性表专题在线评测
- 数据结构(二)--线性表
- 怎么提高c或c++编程能力?
- STM32开发板按键实验
- 多线程对各种变量共享
- C++ Primer 5th Answers
- 21个NP完全问题
- 专题二-线性表
- 算法提高 阮小二买彩票
- 如何提高 C/C++ 编程能力?
- Android 属性动画和View动画的特别之处
- PS笔记--day2
- Android中pendingIntent的深入理解
- 【LeetCode】55. Jump Game
- 使用Samba实现Linus与Windows文件的共享
- windows下 实现radis 集群