目录
本章内容考点较多,在软考的分值为6分左右。
1线性结构
1.1线性表
定义:一个线性表是n个元素的有限序列(n>=0),通常表示为(a1,a2,a3,...,an),其特点是在非空的线性表中:
-
存在唯一的一个称作“第一个”的元素
-
存在唯一的一个称作“最后一个”的元素
-
除第一个元素之外,序列中的每一个元素均只有一个直接前驱
-
除最后一个元素之外,序列中的每一个元素均只有一个直接后继
存储结构:
-
顺序存储(顺序表):线性表的顺序存储是指用一组连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。
-
优点:可以存取表中的元素,按照序号查找元素的速度很快。
-
缺点:插入和删除需要移动元素
-
-
链式存储(链表):线性表的链式存储是用节点来存储数据的,元素的节点位置可以连续也可以不连续。节点空间只有在需要的时候才申请,无须事先申请。
数据域:用于存放数据元素的值
指针域:存放当前元素的前驱元素或后继元素的位置信息,指针域存放的信息可称之为指针
-
单链表的插入和删除操作:
-
优缺点
-
优点:只能顺序的访问元素,不能对元素进行随机存取
-
缺点:插入和删除操作不需要的移动元素
-
-
分类:双向链表、循环链表、单链表、(静态链表)
1.2栈
栈式特殊的线性表,它尊循先进后出的原则。(FILO)
在栈中进行插入和删除操作的一端称之为栈顶(TOP),另一端称之为栈底(BOTTOM)。
不含元素的栈称之为空栈。
存储结构:
-
顺序存储:用顺序表的存储结构来存储元素,只在一端进行插入和删除操作。它需要预先定或申请栈的存储空间,也就是说,栈的存储空间是有限的。当每一个元素入栈时,都需要判断是否栈满,如果栈满,元素入栈会发生上溢现象。
-
链式存储:用链表的存储结构来存储元素,只在一端进行插入和删除操作。克服了顺序存储的栈可能存在的上溢的不足。
1.3队列
栈式特殊的线性表,它尊循先进先出的原则。(FIFO)
它只允许在表的一端插入元素(队尾:rear)和表的另一端删除元素(队头:front)。
存储结构:
-
顺序存储
提问:在图3-7中,当e7入队时,会不会队满呢?
答:会!虽然现在队中还有两个位置(0、1)空着,但是元素入队时,只修改队尾指针,当元素出队时,只修改队头指针。由于顺序队列的存储空间时提前设定的,因此队尾指针会有一个上限值,当队尾指针达到上限时,就不能通过修改队尾指针来实现新元素的入队了。
但是这样会造成存储空间的浪费!
有什么办法解决呢?
有!
顺序循环队列
-
链式存储:用链表的存储结构来存储元素。克服了顺序存储的栈可能存在的上溢的不足。
1.4串
字符串是一串文字及符号的简称,是特殊的线性表。字符串的基本数据元素是字符。我们常常把串作为一个整体来处理。
定义:
-
串长:串的长度,指字符串中字符的个数
-
空串:空串不包含任何字符
-
空格串:由一个或多个空格组成的串
-
子串:由串中任意长度连续字符构成的序列称之为子串,含有子串的串称之为主串
-
串相等:长度相等,对应位置的字符也相同
-
串比较:以ASCII码的值为比较
存储结构:
-
顺序存储
-
链式存储:每个节点可以存储一个字符,也可以存储多个字符,但是需要考虑储存密度问题