title: 用两个栈模拟队列
tags: 数据结构
版权声明:本文参考了严蔚敏的《 数据结构》。未经作者允许,严禁用于商业出版,否则追究法律责任。网络转载请注明出处,这是对原创者的起码的尊重!!!
1 算法描述
由于队列先进先出,而栈后进先出,用两个栈就可以模拟队列
- 进队:如果栈1未满则直接进栈;如果栈1满了,栈2不为空,则队列满了;如果栈1满了,栈2为空,则将栈1 中所有元素倒入栈2中,然后元素进栈1
- 出队: 如果栈2不为空则直接出栈;如果栈2为空,栈1也为空,则队空;如果栈2为空,栈1不为空,则将栈1 中所有元素倒入栈2中,然后栈2出栈。
2 算法实现
#include<iostream>
using namespace std;
#define NULL 0
#define ok 1
#define yes 1
#define no 0
#define error 0
#define false 0
#define maxsize 10
struct stillstack//定义一个静态栈1,栈顶指针指向栈顶元素位置
{
int data[maxsize];
int top, bottom;
};
int initstack(stillstack &s)//对静态栈的初始化
{
s.top = s.bottom = -1;
return ok;
}
int push(stillstack &s, int e)//静态栈入栈
{
if (s.top-s.bottom>=maxsize)
return error;
else
s.data[++s.top] = e;
return ok;
}
int pop(stillstack &s, int &e