数据结构-线性表 (栈,队列,串)
定义:n个元素的有限序列 ,记为(a1,a2,a3,...,an)
特点:存在唯一表头表尾。除了表头,每个元素只有一个直接前驱。除了表尾,每个元素只有一个直接后驱。
存储结构
1 顺序存储
地址连续的存储单元,依次存储表中数据元素。使得逻辑相邻的元素,物理位置上也相邻
优点: 随机存取表中元素。 loc元素位置 L元素所占空间 loc(ai)=loc(a1)+(i-1)*L
缺点:插入删除需要移动大量元素。
2 链式存储
结点存储元素,结点空间可连续,也可不连续,因此需存储元素的连接的逻辑关系。
结点空间需要时再申请。
优点 插入 删除操作方便。
缺点 增加了存储空间开销,不能随机访问任一点。
(1)双向链表:每个结点包含两个指针,指明直接前驱和直接后继元素,可在两个方向上遍历链表。
(2)循环链表:表尾结点的指针指向表中的第一个结点 ,可在任何位置上开始遍历整个链表。
(3)静态链表:借助数组来描述线性表的链式存储结构。
.线性表的插入和删除运算
(1)基于顺序存储结构的运算
插入元素前要移动元素以挪出空的存储单元,然后再插入元素:
删除元素时同样需要移动元素,以填充被删除出来的存储单元。
(2)基于链式存储结构的运算
在链式存储结构下进行插入和删除,其实质是对相关指针的修改。
栈:先进后出的线性表
进行插入和删除的是栈顶另一端是栈底。
顺序存储:用地址连续的存储单元,存储从栈顶到栈底的元素,设指针top指示栈顶位置。
链式存储:链栈,链表的头指针是栈顶指针,插入删除是栈顶进行,无头结点。
队列:先进先出(FIFO)的线性表
只允许表的一端插入(队尾,rear),另一端删除(队头,front)。
顺序存储:用地址连续的存储单元,存储元素,设指针队头指针和队尾指针。
链式存储:链队列,设头结点,头指针指向头结点。判空条件:头指针尾指针的值相同,均指向头结点。
串:由字符指向的有限序列,取值范围受限的线性表。
s为串名,a1,a2...ans1串值,记为s=‘a1,a2,...,an’.
串的几个基本概念
●空串:长度为零的串,空串不包含任何字符。
●空格串:由一个或多个空格组成的串。
●子串:由串中任意长度的连续字符构成的序列。
含有子串的串称为主串。
子串在主串中的位置指子串首次出现时,该子串的第一个字符在主串中的位置。
空串是任意串的子串。
V主串: abcbcc
V子串:cb
●串相等:指两个串长度相等且对应位置上的字符也相同。
●串比较:两个串比较大小时以字符的ASCII码值作为依据。
比较操作从两个串的第一个字符开始进行,字符的ASCII码值大者所在的串为大,
若其中一个串先结束,则以串较长者为大。
cfdeg
cfed
串的存储结构
每个字符串的最后要增加个串结束标志\0。
顺序存储 用一组地址连续的存储单元来存储串值的字符序列。
链式存储 当用链表存储串中的字符时,每个结点中可以存储一个字符,也可以存储多个字符,要考虑存储密度问题。