数据结构-栈-03


第三章 栈

栈{栈、共享栈、链栈、栈的应用}

【一】栈

只允许一端进行插入或删除操作的线性表(此处的线性表指的是顺序表)。

向栈中插入元素称为入栈,从栈中删除元素称为出栈

在这里插入图片描述

入栈:
1. 指针 + 1
2. 赋值(存入数据)

出栈:
1. 赋值(取出数据)
2. 指针 - 1

上溢:当栈满时,再做进栈运算产生空间溢出现象

下溢:当栈空时,作退栈运算产生的溢出现象

习题


▷共享栈

共享栈(双栈)[顺序存储]:两个栈共同开辟一个存储空间,让一个栈的栈底为该空间的始端,另一栈的栈底为该空间的末端,当元素进栈时,都从两端向中间延伸,这样能够使剩余的空间为任意一个栈使用。
栈空
在这里插入图片描述

在这里插入图片描述


▷链栈

栈的Top代表的是下标;链栈的Top代表的是指针

在这里插入图片描述

在这里插入图片描述


▷顺序栈和链栈的比较

  1. 时间性能比价:顺序栈和链栈基本操作的算法,时间复杂度均为O(1)
  2. 空间性能比较:
    初始时顺序栈必须确定一个固定的长度,所以有存储元素个数和空间的浪费问题。
    链栈无栈满问题,只有当内存没有可用空间时才会出现栈满,但是每一个元素都是需要一个指针域,从而产生了结构性开销
    一般结论:当栈在使用过程中元素的个数变化较大时,用链栈比较好,反之,应该采用顺序栈。

经典例题:和顺序栈相比,链栈有一个比较明显的优势是(A)

A.通常不会出现栈满的情况
B.通常不会出现栈空的情况
C.插入操作更容易实现
D.删除操作更容易实现


▷栈的应用:主要在括号匹配、表达式求值、递归

前缀表达式和后缀表达式——步骤:①加括号(从左往右,按优先级加) ②移符号{改后缀就往后启动,改前缀就往前面移动} ③去括号


【二】队列———先进先出

队列{队列、循环队列、双端队列(输出受限、输入受限、不受限)、链队、队的应用}

只允许在表的一端进行插入,而在另一端进行删除。

向队列中插入元素称为入队,从队列里删除元素称为出队

在这里插入图片描述
简单队列可能存在假溢出或假满的问题

▷循环队列_考得最多

满队状态头指针和尾指针不会在一起

在这里插入图片描述

在这里插入图片描述
算循环队列里元素个数:(尾-头+表长)%表长,这个%是求余运算


▷双端队列_考得少,但必须掌握

在这里插入图片描述

指允许两端都可以进行入队和出队操作的队列(不受限)

输出受限的双端队列:允许在一端进行插入和删除,在另一端只允许插入的双端队列称为输出受限的双端队列

输入受限的双端队列:允许在一端进行插入和删除,但在另一端只允许删除的双端队列称为输入受限的双端队列


▷链队

实际上是一个同时带有队头指针队尾指针单链表

在这里插入图片描述


基础习题

严魏敏习题

王道习题

408

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值