“这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战”
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路 用栈a来对push内容进行存储(队列是先进先出,而栈是先进后出,最先进去的在栈的最底下,而队列要最先进去的在最上面,所以把stack1栈里面的一个个压倒stack2里面这样最下面的在stack2里面反而是最上面)当需要pop时,先判断栈b里是否有数值,若有则直接pop;若没有则先将栈a中的元素全部push进栈b中,再将栈b顶端元素pop出来。
1 队列的功能介绍 队列的功能就是FIFO(先进先出)原则。不管是队列还是栈,他们的功能都是存储数据,底层实现可以数组也可以是链表,但是他们各自有他们的特点。既然队列也是存储数据的一种数据结构,那么他就有增删改查等功能。队列的添加元素是在队尾添加,删除元素是在队头删除。
下面介绍一下队列的增删改查操作:
push(int x):在队列尾部添加一个元素 pop():删除队列头部第一个元素 empty():判断是否为空队列 peek():获取队列头部元素 2 栈的功能介绍 栈也是一种存储数据的数据结构,和队列不同的是,这是一种FILO(先进后出)的数据结构,插入和删除都在栈顶完成。
下面介绍一下的栈的增删改查操作:
push(int x):向栈中插入一个元素 pop():删除栈顶元素 top():获得栈顶元素,打印,不删除 empty():判断是否为空 3 栈实现队列的原理介绍 3.1 方式1原理介绍 方式1将栈A作为最终的栈,即栈A中的元素排序和队列中的排序一致,此种方式在push元素入队列时,需要同时操作两个栈,比较消耗时间和空间,但是其他的操作(比如pop,top等)就不会消耗太多的时间和空间资源了。
var CQueue = function() {
this.stack1 = [];
this.stack2 = [];
};
/**
* @param {number} value
* @return {void}
*/
CQueue.prototype.appendTail = function(value) {
this.stack1.push(value)
};
/**
* @return {number}
*/
CQueue.prototype.deleteHead = function() {
if(this.stack2.length>0) {
return this.stack2.pop()
}
if(this.stack1.length == 0) {
return -1
} else {
while(this.stack1.length !== 0) {
this.stack2.push(this.stack1.pop())
}
return this.stack2.pop()
}
};
/**
* Your CQueue object will be instantiated and called as such:
* var obj = new CQueue()
* obj.appendTail(value)
* var param_2 = obj.deleteHead()
*/
运行截图