C語(yǔ)言中用棧+隊(duì)列實(shí)現(xiàn)隊(duì)列中的元素逆置
下面舉例代碼:
提到的Q是一個(gè)隊(duì)列,S是一個(gè)空棧,實(shí)現(xiàn)將隊(duì)列中的元素逆置的算法
#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) //判斷棧是否滿(mǎn) { ?? ?if(S.top == MaxSize-1) ?? ??? ?return true; ?? ?else ?? ??? ?return false; } ? bool Push(SqStack &S,ElemType x) //進(jìn)棧 { ?? ?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) //初始化隊(duì)列 { ?? ?Q.front = Q.rear = 0; } ? bool IsEmpty(Queue Q) //判斷隊(duì)列是否為空 { ?? ?if(Q.front == Q.rear) ?? ??? ?return true; ?? ?else ?? ??? ?return false; } ? bool IsOverflow(Queue Q) //判斷隊(duì)列是否滿(mǎn) { ?? ?if((Q.rear+1)%MaxSize == Q.front) ?? ??? ?return true; ?? ?else ?? ??? ?return false; } ? bool EnQueue(Queue &Q,ElemType x) //進(jìn)隊(duì)列 { ?? ?if(IsOverflow(Q)) ?? ??? ?return false; ?? ?Q.data[Q.rear] = x; ?? ?Q.rear = (Q.rear+1)%MaxSize; ?? ?return true; } ? bool DeQueue(Queue &Q,ElemType &x) //出隊(duì)列 { ?? ?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)) //當(dāng)隊(duì)列不為空時(shí),將隊(duì)列中的元素依次放入棧中 ?? ?{ ?? ??? ?DeQueue(Q,x); ?? ??? ?Push(S,x); ?? ?} ?? ?while(!EmptyStack(S)) //當(dāng)棧不為空時(shí),再將棧中元素依次放入隊(duì)列中 ?? ?{ ?? ??? ?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]); }
(根據(jù)主函數(shù)中代碼)演示:
例如一開(kāi)始隊(duì)列中元素為:3 2 1 ->出
1. 將隊(duì)列中元素依次放到棧中,此時(shí)棧:1 2 3 ->出
2. 再將棧中的元素依次放入隊(duì)列中,此時(shí)隊(duì)列:1 2 3 ->出
到此這篇關(guān)于C語(yǔ)言中用棧+隊(duì)列實(shí)現(xiàn)隊(duì)列中的元素逆置的文章就介紹到這了,更多相關(guān)用棧+隊(duì)列實(shí)現(xiàn)隊(duì)列中的元素逆置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語(yǔ)言示例代碼講解棧與隊(duì)列
- C語(yǔ)言分別實(shí)現(xiàn)棧和隊(duì)列詳解流程
- C語(yǔ)言棧與隊(duì)列相互實(shí)現(xiàn)詳解
- C語(yǔ)言棧與隊(duì)列面試題詳解
- C語(yǔ)言用棧模擬實(shí)現(xiàn)隊(duì)列問(wèn)題詳解
- C語(yǔ)言循環(huán)隊(duì)列與用隊(duì)列實(shí)現(xiàn)棧問(wèn)題解析
- C語(yǔ)言超詳細(xì)講解棧與隊(duì)列實(shí)現(xiàn)實(shí)例
- C語(yǔ)言 淺談棧與隊(duì)列的定義與操作
- C語(yǔ)言近萬(wàn)字為你講透棧和隊(duì)列
相關(guān)文章
OpenCV實(shí)現(xiàn)圖像輪廓檢測(cè)以及外接矩形
這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)圖像輪廓檢測(cè)以及外接矩形,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01Cocos2d-x UI開(kāi)發(fā)之CCControlSwitch控件類(lèi)使用實(shí)例
這篇文章主要介紹了Cocos2d-x UI開(kāi)發(fā)之CCControlSwitch控件類(lèi)使用實(shí)例,本文代碼中含大量注釋講解了CCControlSwitch控件類(lèi)的使用,需要的朋友可以參考下2014-09-09C++標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)WAV文件讀寫(xiě)的操作
本文將使用標(biāo)準(zhǔn)C++庫(kù)實(shí)現(xiàn)對(duì)數(shù)據(jù)為PCM格式的WAV文件的讀寫(xiě)操作,只使用標(biāo)準(zhǔn)C++庫(kù)函數(shù),不依賴(lài)于其他的庫(kù),對(duì)C++標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)WAV文件讀寫(xiě)相關(guān)知識(shí)感興趣的朋友一起看看吧2022-01-01OLEDB打開(kāi)Excel文件的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇OLEDB打開(kāi)Excel文件的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01