Day 5:用两个栈实现队列
时间:2022-07-24
本文章向大家介绍Day 5:用两个栈实现队列,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
剑指Offer_编程题——用两个栈实现队列
题目描述:
用两个栈来实现一个队列,完成队列的push和pop操作。队列中的元素为int类型
具体要求:
时间限制: C/C++ 1秒,其他语言2秒 空间限制: C/C++32M,其他语言64M
具体思路:
背景知识介绍: 栈和队列是数据结构中的线性结构中的两种;其中栈是具有“先进后出”的特点,队列是具有“先进先出”的特性。并且他们的存储都有两种形式:顺序存储和链式存储。并且在本题中会用到这些方式: 1、pop():移除栈顶,并作为返回值返回给函数。 2、push(element):入栈 3、isEmpty() 判断是否为空 具体实现思路: 刚才我们介绍栈“先进后出”,队列是先进先出;如果实现队列的功能的话,我们可以用两个栈来模拟实现队列的操作; 具体我们分别用java和python来实现这一思路 1、首先我们用java来实现
import java.util.Stack;
public class Solution{
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node){
stack1.push(node);
}
public int pop(){
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
int out = stack2.pop();
while(!stack2.isEmpty()){
stack1.push(stack2.pop());
}
return out;
}
}
其效果如图所示:
2、接下来用python将其实现
class Solution:
def __init__(self):
self.stack1 = []
self.stack2 = []
def push(self, node):
self.stack1.append(node)
def pop(self):
try:
_pop = self.stack2.pop()
except IndexError as e:
if len(self.stack1) != 0:
for i in range (len(self.stack1)):
self.stack2.append(self.stack1.pop())
_pop = self.stack2.pop()
else:
_pop = None
return _pop
其效果如图所示:
要想看代码的运行效果,我们可以加上main();具体实现如下:
if __name__ == '__main__':
s = Solution()
s.push(1)
s.push(2)
s.push(3)
s.push(4)
s.push(5)
s.push(6)
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
s.push(7)
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
其代码运行结果如下:
总结
本道题主要考察栈和队列,难度系数较低,在做题之前,我们应该知道栈和队列的基本操作,包括栈的出栈、入栈、以及栈的一些存储结构,并且知道两个栈可以模仿队列的基本操作,这是基于栈的“先进后出”的特性;两个栈刚好模仿了队列“先进先出”的操作。继续加油,争取早日找到工作,Good Luck!!!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Devtools 老师傅养成[1] - Chrome Devtools介绍
- Android4.4开发之电池低电量告警提示原理与实现方法分析
- 浅谈android性能优化之启动过程(冷启动和热启动)
- Android拖动条的实现代码
- Devtools 老师傅养成[3] - Console 面板
- Android开发中数据库升级且表添加新列的方法
- Android冷启动实现app秒开的实现代码
- Devtools 老师傅养成[4] - Sources 面板
- android中使用Html渲染的方式实现必填项前面的*号示例
- android视频播放简单实现示例(VideoView&MediaPlayer)
- Android中SharedPreference详解及简单实例
- Devtools 老师傅养成[5] - Network 面板
- android实现上传本地图片到网络功能
- android音乐播放简单实现的简单示例(MediaPlayer)
- Android实现桌面悬浮小火箭效果