题目描述
用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。
数据范围: n≤1000
要求:存储n个元素的空间复杂度为 O(n) ,插入与删除的时间复杂度都是 O(1)
示例1
输入:
["PSH1","PSH2","POP","POP"]
返回值:
1,2
说明:
"PSH1":代表将1插入队列尾部
"PSH2":代表将2插入队列尾部
"POP“:代表删除一个元素,先进先出=>返回1
"POP“:代表删除一个元素,先进先出=>返回2
示例2
输入:
["PSH2","POP","PSH1","POP"]
返回值:
思路
两个栈,C语言里面那就是两个数组,每个数组对应一个指针,利用栈先进后出的特点完成先进先出的特点,那么每个元素在两个栈中都需保存, 且栈1和栈2倒置,push加入栈1,然后栈2为栈1倒置,栈2指针归零,pop直接从栈2中弹出一个元素,同时使用栈2倒置,重置栈1
具体实现
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倒入stack2
top2=0;
for(int i=0;i<top1;i++){
stack2[top2++]=stack1[top1-1-i];
}
}
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;
}