特殊线型表的概括
特殊线型表
前言
在数据结构中我们学习了线型结构,那么这篇我们来扒一扒特殊的线型结构
下面进入正题全程高能没请各位观众姥爷们坐好。
一、概述
分类如图所示:
还是惯用的套路,我们从数据结构的三要素——逻辑结构,数据运算,存储结构。
二、栈(Stack)
定义
只允许在一端进行插入或操作(LIFO)的线型表
栈又名堆栈,英文Stack的意思是一堆,在进行操作时也只能在一顶部进行操作,是一种运算受限的线型表。
它的实现又可以分为两种:-顺序栈(被数组实现) - 链栈(被链表实现)
基本概念
栈顶
最后一个入栈的元素,可以进行插入和删除的一端叫栈顶。相对动态
栈底
同理和栈顶相反的一端,不可以进行任意操作的一端就是栈底
入栈
第一个进入栈的元素就叫入栈,也称为压栈。
出栈
使用结束后,将元素删除的操作,就是出栈,也叫退栈。
共享栈
因为栈的内存有限,存入数据过多就会发生栈的溢出,为了解决内存的分配问题。
于是共享栈就出现了
两片栈公共使用一片空间,而这片空间不属于任意一方,只有当数据存储进来的时候才会占用,两个栈从两边往中间增长。
示意图如下:
空栈
不含任何数据的栈。
合法出栈顺序
n个不同元素进栈,出栈元素不同排列的使用卡特数计算一下
有兴趣的小伙伴可以当做一道智力题来了解一下。
三、队列(Queue)
定义
和栈相对的对应的是队列,只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,简写(FIFO)。
和栈一样,队列是一种操作受限制的线性表。他的底层实际上是操作受限的,所以他也遵循线型表的一些规则,感兴趣的朋友可以点解了解一下。
简单理解就像在排队一样
基本概念
对头
顾名思义,因为队列的特性,所以进行删除操作的端称为队头。
队尾
同理进行插入操作的端称为队尾
空队列
这个。。。就不用多说了吧
对头,队尾元素
就是指在双端的元素,这个也很好理解。
分类
循环队列
循环队列就是在逻辑上将最后一个位置环绕在第一个位置上。
特点:
循环队列的好处是可以防止伪溢出。
下面我们来看看他的实现步骤:
具体实现
在队列中设置两个指针,用来记录对头位置(front)与队尾位置(rear)。
如果两个指针重合,则判定这个队列为空。
而如果在循环队列中,两个指针位置相差一那么就可以判断这个队列已满,用牺牲一个位置的方法来判断队列是否已满。
链式实现对列
如果用链式存储,那么他就会具备链表的一些基本属性,这里我就不在展开说。
感兴趣点这里点这里。
那么它的好处也是显而易见的,不用担心内存分配不够的问题。
双端对列
我们对对列已经有不少认识了,那么双端对列也是如此。
其实就是在任意一段都可以进行增删操作。
还有一些受限的双端对列,下面放一张图供大家理解。
示意图如下:
优先对列(priority queue)
说到优先对列估计会很陌生,但是谈的插队时应该就了解了吧!
优先对列的简单理解就是插队。
那么他是这么实现插队的呢?
这个就要用堆排序,如果想详细了解堆排序的敬请关注我。在后续我会一一为大家解难。
四 、串(String)
定义
串,即字符串(String)是由零个或多个字符串组成的有限序列。
基本概念
串长
一个字符串中包含的字符数。
子串
串中任意个连续的字符串组成的子序列
主串
链式存储中的主串包含了每一个子串的地址。
空串
长度为零。
对比线型表
串是一种特殊的线型表,数据元素呈现线型关系。
项目 | 串 |
---|---|
对象限定 | 中文字符,英文字符,数字字符,标点字符 |
操作对象 | 子串 |
线型表
这里留给大家思考一下,有问题可以写在评论区,有问必答。
串的比较
本质上比较的就是字符编码,从头开始比较判断。