0
点赞
收藏
分享

微信扫一扫

每日一练(剑指offer)用两个栈实现队列

描述

用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。

示例

输入:

["PSH2","POP","PSH1","POP"]

返回值:

2,1

思路

1先考虑栈的结构就像一个水桶,先进的元素在下面,列队就是先进的先出去,也就是把栈的反过来,将水桶里的水倒到另一个水桶里面

2入栈:正常入栈1,同时将栈1倒置,重置栈2

3出栈:从栈2中弹出一个元素,同时使用栈2倒置,重置栈1

C语言)

/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param node int整型
* @return 无
*/
#include <stddef.h>
static int stack1[1000];
static int top1=0;
static int stack2[1000];
static int top2=0;
void push(int node ) {
// write code here
//先入栈stack1
stack1[top1++]=node;
//将stack1倒入stack
top2=0;
for(int i=0;i<top1;i++){
stack2[top2++]=stack1[top1-1-i];
}
}

/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param 无
* @return int整型
*/
int pop() {
// write code here
//先从栈2出栈
int ans=stack2[top2-1];
top2--;
//倒置栈
top1=0;
for(int i=0;i<top2;i++){
stack1[top1++]=stack2[top2-1-i];
}
return ans;


}

举报

相关推荐

0 条评论