数据结构(十二)栈和队列

数据结构栈的作用

一.递归

递归:直接调用自己或通过一系列的调用语句间接地调用自己

每个递归定义必须至少有一个条件,满足递归不再进行,即不在引用自身而是返回退出

 

迭代与递归

迭代:循环递归:选择

迭代:不需要反复调用函数和占用额外的内存

递归:使程序结构清晰监理函数副本,耗费时间和内存

 

例斐波那契数列的递归函数

递归与栈

递归过程退回的顺序是他前行顺序的逆序。在退回过程中,可能要执行某些动作,包括恢复在前行过程中存储起来的某些数据。这种存储某次额数据,并在后面又以存储的逆序恢复这些数据,符合栈的数据结构。所以在前行阶段,对于每一层的递归,函数的局部变量,参数值以及返回地址都被压入栈中。在退回阶段,位于栈顶的局部变量,参数值以及返回地址被弹出,用于返回调用层次中执行代码的其余部分,也就恢复了调用的状态。

 

二.四则运算表达式求值

9 + (3 - 1) * 3 + 10 / 2   后缀表达式:9 3 1 – 3 * +10  2 / +

规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到符号,就将处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到获得结果。

 

 

队列的定义

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

先进先出 FIFO

 

队列顺序存储

假溢出:

 

循环队列

循环队列(头尾相连的顺序结构)解决假溢出

 

判断队列为空的方法

当队列空时,条件是front == rear .当队列满的时候,修改条件,保留一个元素空间。最大尺寸为queuesize . 队列满的条件是(rear +1)% queuesize == front

计算队列长度公式:(rear– front + queuesize)% queuesize

 

循环队列的操作

入队

出队

 

队列的链式存储结构= 只能尾进头出的线性表的单链表

 

总结回顾

栈:限定在表尾进行插入和删除操作的线性表

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

 

均可以用线性表的顺序存储结构来实现,但都存在着顺序存储的一些弊端。

 

对于栈,如果是两个相同数据类型的栈,则可以用数组的两端作栈底的方法来让两个栈共享数据,最大化利用数组空间。

对于队列来说,为了避免数组查如何删除要移动数据,引入循环队列,解决移动数据的时间损耗。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值