日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言中用棧+隊列實現隊列中的元素逆置_C 語言

作者:MyDreamingCode ? 更新時間: 2022-04-17 編程語言

下面舉例代碼:

提到的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 ->出?

原文鏈接:https://blog.csdn.net/qq_61706112/article/details/120231560

欄目分類
最近更新