C語言中用棧+隊列實現隊列中的元素逆置
下面舉例代碼:
提到的Q是一個隊列,S是一個空棧,實現將隊列中的元素逆置的算法
#include<stdio.h> #define MaxSize 10 typedef int ElemType; typedef struct{ ElemType data[MaxSize]; int front,rear; }Queue; typedef struct{ ElemType data[MaxSize]; int top; }SqStack; void InitStack(SqStack &S) //初始化棧 { S.top = -1; } bool EmptyStack(SqStack S) //判斷棧空 { if(S.top == -1) return true; else return false; } bool OverflowStack(SqStack S) //判斷棧是否滿 { if(S.top == MaxSize-1) return true; else return false; } bool Push(SqStack &S,ElemType x) //進棧 { if(OverflowStack(S)) return false; S.data[++S.top] = x; return true; } bool Pop(SqStack &S,ElemType &x) //出棧 { if(EmptyStack(S)) return false; x = S.data[S.top--]; return true; } void InitQueue(Queue &Q) //初始化隊列 { Q.front = Q.rear = 0; } bool IsEmpty(Queue Q) //判斷隊列是否為空 { if(Q.front == Q.rear) return true; else return false; } bool IsOverflow(Queue Q) //判斷隊列是否滿 { if((Q.rear+1)%MaxSize == Q.front) return true; else return false; } bool EnQueue(Queue &Q,ElemType x) //進隊列 { if(IsOverflow(Q)) return false; Q.data[Q.rear] = x; Q.rear = (Q.rear+1)%MaxSize; return true; } bool DeQueue(Queue &Q,ElemType &x) //出隊列 { if(IsEmpty(Q)) return false; x = Q.data[Q.front]; Q.front = (Q.front+1)%MaxSize; return true; } bool ReverseQueue(Queue &Q) { SqStack S; ElemType x; InitStack(S); while(!IsEmpty(Q)) //當隊列不為空時,將隊列中的元素依次放入棧中 { DeQueue(Q,x); Push(S,x); } while(!EmptyStack(S)) //當棧不為空時,再將棧中元素依次放入隊列中 { Pop(S,x); EnQueue(Q,x); } return true; } void main() { Queue Q; InitQueue(Q); EnQueue(Q,1); EnQueue(Q,2); EnQueue(Q,3); ReverseQueue(Q); printf("%d ",Q.data[Q.front]); }
(根據主函數中代碼)演示:
例如一開始隊列中元素為:3 2 1 ->出
1. 將隊列中元素依次放到棧中,此時棧:1 2 3 ->出
2. 再將棧中的元素依次放入隊列中,此時隊列:1 2 3 ->出
到此這篇關於C語言中用棧+隊列實現隊列中的元素逆置的文章就介紹到這瞭,更多相關用棧+隊列實現隊列中的元素逆置內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!