数据结构之栈和队列

回顾一下上章我们学的线性表 是 零个或多个数据元素的有限序列,以及她的抽象数据类型:

线性表分为 顺序存储结构 与 链式存储结构

顺序存储结构:是用一段地址连续的存储单元来依次存放线性表的元素。例如:数组
链式存储结构:不收固定存储空间,引入指针的概念来快速的实现数据元素的插入,删除操作的链式存储结构。分类为:单链表,双链表,循环链表,,静态链表(额外理解不使用指针去实现链式存储结构)。

裂解了线性表后,下面我们正式介绍一下栈和队列:

限定只能在栈尾插入和删除操作的线性表。

我们知道栈是一个线性表,只是它的操作比较特殊,限定操作的位置的线性表。通常我们把可以删除和插入的一端叫做栈顶,相反另一端叫做栈底,这里有几个概念:

LIFO 结构(last in first out) 后进先出

我们需要知道有一些人程也叫他LIFO结构,因为栈的数据元素操作顺序为后进先出

进栈 压栈 入栈

栈的插入操作

出栈 弹栈

栈的删除操作

既然栈为一种特殊线性表我们就来探讨一下栈的顺序存储方式和链式存储方式:

栈的顺序存储方式

不同于一般的线性表而言,栈的顺序存储方式的操作,删除和插入时间复杂度均为O(1),他不涉及到操作后元素的移动,仅仅操作栈尾的位置。
我们都知道顺序存储方式的缺点:空间分配固定,我们想想有没有既要空间高效而且又不会出现溢出的栈呢,那么久诞生了共享栈事实上它处理的问题局限比较大这里就不深入讲解了。

栈的链式存储方式

这里需要注意的是栈的链式存储结构因为栈顶就在线性表的头部,所以我们不在需要头结点,我们把头指针直接指向栈顶,它的进栈,出栈操作仅限于栈顶,所以时间复杂度也为O(1).

栈的应用
递归
例子:斐波那契数列的实现
四则运算法则
例子:后缀(逆波兰)标识定义法

队列

只允许在一端进行插入操作,另一端进行删除操作的线性表。

与栈类似的是,他也是一种特殊的线性表,限定在一端删除,一端插入的特殊线性表。这里它也有几个概念:

FIFO(first in first out)先进先出

我们可以类比生活中的排队

队头

我们把允许删除的一端叫做队头

队尾

我们把允许插入的一端叫做队尾

同样我们来分析一下队列的顺序存储方式和链式存储方式:

队列的顺序存储方式

我们延伸出循环队列这个概念。它是一种头尾相接的顺序存储方式。我们通过改变头指针和尾指针的方式来实现。

队列的链式存储方式

因为它仅仅在队尾和队头进行插入和删除操作,所以他的时间复杂度也均为O(1).

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 昨天是我们的首月纪念日! 你最喜欢的秋天!希望即将到来的秋天能让你开开心心!
    厌七八阅读 65评论 0 0
  • 一不小心熬了个夜,竟然到了周五。入职刚刚好有两周。最近忙着捋思路,画导图,学产品课程,也并没有静下心来记录自己最近...
    Simpls阅读 111评论 0 0
  • ​​ 对那些特别喜欢的电影,好像总是有说不完的解读,《燃烧》作为一部我很喜欢的电影,其实很早便想拿出来和大家分享,...
    欠你一部电影阅读 566评论 0 0
  • 常常,我们在职场的差别在于格局,同样是搬砖,有的人觉得自己在堆砌一堵墙,有的人觉得自己在建房,还有人认为自...
    临竹听风阅读 256评论 0 0
  • 今天是母亲节,让我们借此机会来聊聊母亲的话题吧。 如果没什么特殊的原因,我想我现在说母亲是很不容易的,应该没有人会...
    雨如花飞阅读 643评论 6 17