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!

推薦閱讀: