用两个栈实现队列的操作
来源:互联网 发布:北京滑雪场 知乎 编辑:程序博客网 时间:2024/05/16 19:06
只要了解栈和队列的特性,这道题应该就不会有难度,插入元素的时候,都插入到第一个栈,然后删除的时候,可以把第一个栈中的元素全部弹出并压入第二个栈,这样的话第二个栈中的元素与第一个栈的元素顺序相反,先进的元素处于栈顶,可以直接进行删除,这样的话,删除一个元素的步骤是:当第二个栈不为空时,处于栈顶的元素总是最先进入队列的元素,可以弹出,如果第二个栈为空时,把第一个栈中的元素逐个弹出并压入第一个栈即可。如果要插入一个元素,还是压入第一个栈,这样的话后进的还是后出。代码如下:
//用两个栈实现队列的删除和插入操作#include<stdio.h>#include<malloc.h>#define MAXSIZE 20typedef struct seqstack{ int data[MAXSIZE]; int top;}seqstack;//初始化栈seqstack *init(){ seqstack *s; s=malloc(sizeof(seqstack)); s->top=-1; return s;}//判空栈int empty(seqstack *s){ if(s->top==-1) return 1; else return 0;}//入栈int push(seqstack *s,int x){ if(s->top==MAXSIZE-1) return -1; else { s->top++; s->data[s->top]=x; return 0; }}//出栈int pop(seqstack *s){ if(empty(s)) return -1; else { s->top--; return 0; }}//取栈顶元素int top(seqstack *s){ int x; if(empty(s)) return -1; else { x=s->data[s->top]; return x; }}void insert(int x,seqstack *s1) //插入队列元素相当于入栈{ push(s1,x); }int delete(seqstack *s1,seqstack *s2){ int x,y; if(empty(s2)) { while(!empty(s1)) { x=top(s1);push(s2,x);pop(s1); } } if(empty(s2)) { printf("empty queue"); return -1; } y=top(s2); return y;}int main(){ int a[4]={2,5,1,4}; int i,y=0; seqstack *s1,*s2; s1=init(); s2=init(); for(i=0;i<4;i++) { insert(a[i],s1); } y=delete(s1,s2); printf("%d\n",y);}
扩展:使用两个队列实现栈,可以把要插入的元素a,b,c都插入到queue1,
然后要弹出一个元素就是c后插入的要先弹出,然后可以先把前两个元素删除并插入queue2中,这样的话删除c即从栈中弹出c元素,可以用同样的的方法弹出b元素,
要往栈内压入一个元素d,此时queue1中还有一个元素a,把d压入,再从栈内弹出一个元素,后进入的要先弹出,所以要弹出d,可以把a元素删除并插入queue2,然后删除d,即从栈中弹出元素d,
0 0
- 用两个栈实现队列的操作
- 用两个栈实现队列的操作
- (java)两个队列实现栈的操作
- 用两个队列实现一个栈的功能操作C++
- 用两个栈实现队列操作
- 用两个栈来实现一个队列,完成队列的add和poll、peek操作。
- 用两个栈来实现一个队列,完成队列的Push和Pop操作
- 用两个栈来实现一个队列,完成队列的Push和Pop操作
- 用两个栈来实现一个队列,完成队列的Push和Pop操作。
- 6.用两个栈来实现一个队列,完成队列的Push和Pop操作
- 用两个栈来实现一个队列,完成队列的Push和Pop操作。
- 用两个栈实现队列 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型
- 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
- 用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。
- 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
- 用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类
- 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
- 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
- Notification,Android中通知的使用
- c# 匿名方法
- 问题解决:在非主Activity中无法退出应用程序,只能返回上一个Activity
- VS2015 Xamarin- ios程序真机调试
- 每天一点Linux-Makefile
- 用两个栈实现队列的操作
- 数据结构-堆排序
- 机器学习总结3_朴素贝叶斯
- 关于ToolBar的一点理解
- ios高级课之---数据处理之文件读写1
- HDU 5665
- Fragment not attached to activity 异常
- YUV详解
- 次方求模