两个顺序栈实现顺序队列功能

来源:互联网 发布:公务员可以开淘宝店吗 编辑:程序博客网 时间:2024/05/16 05:52

设有2个栈s1和s2,入队操作时,将将元素压入栈s1;出队操作时,将s1中的元素(从栈顶到栈底)压入s2(此时s1为空栈),s2中的栈顶元素出栈,则实现出队功能;将s2中余下的元素(从栈顶到栈底)全部压入s1(此时s2为空栈)。

代码实现如下:

// 2Stack_Queue.cpp : 定义控制台应用程序的入口点。//用2个顺序栈实现顺序队列功能#include "stdafx.h"#include <iostream>using namespace std;typedef char type;#define Max 100//栈结点typedef struct stack{   type data[Max];   int top;//栈顶指针}stack,*pStack;//初始化栈void InitStack(pStack s){s->top=-1;}//清空栈void ClearStack(pStack s){s->top=-1;}//入栈操作void Push(pStack s, type data){//判断栈是否满if(Max-1==s->top){ exit(-1);}s->data[++s->top]=data;}//出栈操作type Pop(pStack s){if(-1==s->top)//栈为空{  exit(-1);}return s->data[s->top--];}//入队操作void EnterQueue(pStack s1,type data){Push(s1,data);  //栈底到栈顶相当与队首到队尾}//出队操作type DelQueue(pStack s1,pStack s2){ClearStack(s2); //将栈s2清空while(s1->top>=0) //将栈s1中的元素逆序压入栈s2中  压完后,s1->top=-1 相当于s1为空栈{Push(s2,s1->data[s1->top--]);}type temp=Pop(s2); //s2栈顶元素出栈 此元素为队列队首元素while(s2->top>=0) //将栈s2中余下的元素逆序压回栈s1中 压完后,s2为空栈{ Push(s1,s2->data[s2->top--]);}return temp;}//打印队列 从队首到队尾void PrintQueue(pStack s1){int length=s1->top+1;if(0==length){ exit(-1);}int j=0;while(length){ cout<<s1->data[j++]<<" ";length--;}    cout<<endl;}int _tmain(int argc, _TCHAR* argv[]){type a[5]={'a','b','c','d','e'};stack s1,s2;InitStack(&s1);InitStack(&s2);for(int i=0;i<5;i++)EnterQueue(&s1,a[i]);PrintQueue(&s1);cout<<"出队元素: "<<DelQueue(&s1,&s2)<<endl;PrintQueue(&s1);return 0;}


0 0
原创粉丝点击