数据结构——两个栈模拟实现一个队列(C语言)
数据结构——两个栈模拟实现一个队列(C语言)
两个栈模拟实现一个队列
实现思路:入栈时存储元素进入栈1,出栈时,将栈1中所有元素取出并放入栈2中,这样栈1中的元素就进行了逆置,即实现了与输入顺序相同。
列子:入栈元素顺序:1,2,3,4,5
那么此时栈1中元素自上而下顺序为:5,4,3,2,1
栈2元素为空。
出栈时,将栈1中元素依次取出放入栈2
此时栈2中元素自上而下顺序为:1,2,3,4,5(即保证了与输入顺序相同)
栈1元素为空
#include
#include
#define MAXSIZE 50
#define ElemType int
typedef struct{
ElemType data[MAXSIZE];
int top;
}SeqStack;
void InitStack(SeqStack *s){
s->top=-1;
}
bool StackEmpty(SeqStack &s){
if(s.top==-1)
return true;
return false;
}
bool Push(SeqStack &s,ElemType e){
if(s.top==MAXSIZE-1)
return false;
s.data[++(s.top)]=e;
return true;
}
bool Pop(SeqStack &s,ElemType &e){
if(s.top==-1)
return false;
e=s.data[(s.top)--];
return true;
}
bool GetTop(SeqStack &s,ElemType &e){
if(s.top==-1)
return false;
e=s.data[s.top];
return true;
}
void check(bool flag){
if(flag)
printf("操作成功!\n");
else
printf("操作失败!\n");
}
void display(SeqStack &s){
int index=s.top;
while(index>-1){
printf("%d ",s.data[index--]);
}
printf("\n");
if(index==s.top)
printf("队列元素为空!");
}
int main(){
int n;
//栈的初始化
SeqStack s,s2;
printf("顺序栈的基本操作\n");
printf("栈1的初始化\n");
InitStack(&s);
printf("栈1的初始化\n");
InitStack(&s2);
printf("模拟队列\n");
while(1){
int op;
int e;
bool flag;
printf("请选择操作\n1.进队列\n2.出队列\n3.判空\n4.获取队列头部元素\n5.打印队列中所有元素\n");
scanf("%d",&op);
switch(op){
case 1:
printf("入队列元素:");
scanf("%d",&e);
flag=Push(s,e);
check(flag);
if(!StackEmpty(s)&&!StackEmpty(s2)){
//如果栈2元素还没弹出时,再栈1加入新元素时,
//为了保证队列的连贯性,必须让前面所有元素出栈2
printf("清除栈2所有元素!\n");
while(!StackEmpty(s2)){
flag=Pop(s2,e);
if(flag)
printf("队列头部元素出队列,出队列元素为:%d\n",e);
}
}
break;
case 2:
while(!StackEmpty(s)){
Pop(s,e);
Push(s2,e);
}
flag=Pop(s2,e);
check(flag);
if(flag)
printf("队列头部元素出队列,出队列元素为:%d\n",e);
break;
case 3:
flag=StackEmpty(s2);
if(StackEmpty(s)&&StackEmpty(s2))
printf("队列为空!\n");
else
printf("队列非空!\n");
break;
case 4:
while(!StackEmpty(s)){
Pop(s,e);
Push(s2,e);
}
flag=GetTop(s2,e);
check(flag);
if(flag)
printf("队列头部元素为:%d\n",e);
break;
case 5:
while(!StackEmpty(s)){
Pop(s,e);
Push(s2,e);
}
display(s2);
default:
break;
}
}
return 0;
}
数据结构——两个栈模拟实现一个队列(C语言)相关教程
5340. 【NOIP2017模拟9.2A组】春思
5340. 【NOIP2017模拟9.2A组】春思 题面 两个非负整数A,B 仅一个正整数,表示答案 2 3 15 题解 这道题有N个结论 第一:A可分解为P1b1P2b2...PnbnP1^{b1}P2^{b2}...Pn^{bn}P1b1P2b2...Pnbn(分解质因数) 第二:首先,第一点是正确的,其次,ABA^BAB可表示为P1
ZOJ - 3944 People Counting【暴力模拟】
ZOJ - 3944 People Counting【暴力模拟】 传送门 Sample Input 2 3 3 .O. /| (.) 3 4 OOO( /|\ ())) Sample Output 1 4 题意:给你一个n*m的图,问图中有几个人,图中的某一部分也可以代表一个人 思路:暴力,找到的每一部分都消去和他是同一个人的那部分 #in
[数据结构与算法]太平洋大西洋水流问题(图)
[数据结构与算法]太平洋大西洋水流问题(图) 给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。 规定水流只能按照上、下、左、右四个方向流动,且只能从高到低
信号频分复用
信号频分复用 信号频分复用 对锯齿波信号频谱分析,并用两个非原始信号周期整倍数的正弦波信号进行双边带调制 close allclearFs=100000; %采样频率t=0:1/Fs:0.1;x1=sawtooth(1000/7*2*pi*t); %信号周期2pi/(t的系数)figureplot(t,x1,'LineWidth',1.2)axis([0
模拟退火 八皇后_模拟退火和八皇后问题
模拟退火 八皇后_模拟退火和八皇后问题 模拟退火 八皇后 The Simulated Annealing (SA) algorithm is one of many random optimization algorithms. Unlike algorithms like the Hill Climbing algorithm where the intent is to only improve the optimizati
B. Nice Matrix(模拟+贪心)Codeforces Round #675 (Div. 2)
B. Nice Matrix(模拟+贪心)Codeforces Round #675 (Div. 2) 原题链接: https://codeforces.com/contest/1422/problem/B 测试样例 input 2 4 2 4 2 2 4 4 2 2 4 3 4 1 2 3 4 5 6 7 8 9 10 11 18 output 8 42 Note In the first test case we can, for examp
数据结构 树
数据结构 树 本文章的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,滥用技术产生的风险与本人无关。 本文章是自己学习的一些记录。 树的概念: 树是一种抽象数据类型或是实作这种抽象数据类型的数据结构,用来模拟具有树状
ACMer不得不会的线段树,究竟是种怎样的数据结构?
ACMer不得不会的线段树,究竟是种怎样的数据结构? 大家好,欢迎阅读 算法数据结构 专题,今天我们来聊聊一个新的数据结构,叫做线段树。 线段树这个数据结构很多人可能会有点蒙,觉得没有听说过,但是它非常非常有名,尤其是在竞赛圈,可以说是 竞赛圈的必备