数据结构与算法:栈与队列

Stack 是一个后进先出的线性表,它要求只在表尾进行删除和插入操作。
简单理解:具有特殊限制的线性表,限制要求如上。
出栈:pop();
入栈:push();
清空栈:clear();

题目:利用栈的特点,将二进制装换为十进制数
例如二进制数:100110
将二进制数按位入栈

0
1
1
0
0
1

然后通过出栈操作进行计算转换

题目:利用栈的特点,将二进制转换为八进制
利用两个栈,一个栈存二进制数,另一个栈用做记录转换为八进制的数,按顺序弹出,得到转换的八进制。

栈的应用:
利用栈计算后缀表达式
如中缀表达式:1+(2-5)*6
如后缀表达式为:1 2 5 - 6 * +
声明栈A
将后缀表达式 数字依次入栈A,如果出现符号,则取出栈顶两个元素进行操作,再将结果入栈,直到后缀表达式遍历完成,弹出栈中的结果便是答案

出现符号"-"出现符号"*"出现符号"+"遍历完成
56
2-3-3-18-18
11111-17

———>从左向右看,每一列为一个栈的状态
利用栈将中缀表达式转换为后缀表达式
1+(2-3)*4 + 10/5
从左到右遍历中缀表达式的每一个数字和符号,数字直接输出,如果是符号,需要判断其与栈顶符号的优先级,如果是右括号或者优先级低于栈顶符号,则栈顶元素依次出栈输出,直到遇到左括号,或者栈为空,再将判断的符号入栈。

将上面两点结合,就可以完成中缀表达式计算器
实现原理:
声明两个栈A,B,栈A进行计算后缀表达式,栈B进行中缀表达式的转换,中缀表达式转换过程中,将输出的数字和符号依次入栈A进行计算,如此可以得到结果。

队列

queue是只允许在一端进行插入操作,在另一端进行删除操作的线性表,具有先进先出的特性。
简单理解:食堂排队打饭

和栈相反,队列一般用链表来实现,栈一般用顺序表来实现。

队列如果用顺序存储:
每一次取队头,后面的每一个元素都需要向前移动,会增加耗时
如果增加一个灵活指针当队头,随着出队列,入队列操作增多,会有大部分空闲区域,同时可能会倒是数据溢出。
为解决上面的问题,可以通过循环队列解决
通过灵活改变头指针和尾指针 ,头指针和尾指针分别在出队和入队操作进行+1移位,同时用取模操作让,头尾指针不断循环,当头尾指针相等,便是队列已满或者队列已空

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值