专题二-线性表

来源:互联网 发布: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)判断位置是否合法
(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
原创粉丝点击