循環隊列的進隊算法c語言,循環隊列的定義,入隊算法,出隊算法,遍歷算法,及其代碼實現-Go語言中文社區...

隊列 的定義:

一種可以是實現“先進先出”的存儲結構。數據的進出類似于排隊購票。隊只允許隊尾一端(rear)添加,在另一端隊頭(front)刪除。隊有隊頭(front)和隊尾(rear)兩個指針。隊頭front指向第一個元素,隊尾rear指向無實際意義的元素,即隊列最后一個元素的下一位置。

//隊列定義

typedef struct Queue

{

int *pBase;//數組基地址,數組的首地址

int front;//隊頭

int rear;//隊尾巴

}QUEUE;

//創建一個隊列,空間分配,保存6個整形元素。

void init (QUEUE *pQ)

{

pQ->pBase=(int*)malloc(sizeof(int)*6);//長度為6的數組

pQ->front=0;

pQ->rear=0;

}

隊列的分類:

分為動態隊列和靜態隊列兩種。動態隊列用鏈表實現。動態隊列易于實現。靜態隊列用數組實現,靜態隊列通常都必須是循環隊列。

靜態隊列為甚么必須是循環隊列?

6c815cc3ea613eed83dac2135d7a6d45.png

62171870cfe8c2106eb4e44efdd85193.png

cc152cf2a75026550148fb2b76511fe5.png

數組實現靜態隊列,刪除元素時候,每刪除一位,front指針上移一位,浪費一個單位的數組空間。這種方式添加元素的時候rear上移一個,刪除元素的時候front上移一個。總之都是上移。

b6558f695f5501233a9d8bc5ebb73822.png

當front或者rear指到最上面一個位置,再上移就移動到最下面一個位置。所以數組實現隊列的時候必須是循環隊列,傳統方式實現不了。

2.循環隊列需要幾個參數來確定,及循環隊列各個參數的含義

隊列需要兩個參數確定,front和rear.2個參數不同的場合有不同的含義,建議初學者先記住,然后慢慢體會。

隊列初始化

Front和rear的值都是零

隊列非空

Front 代表的是隊列的第一個元素

Rear代表隊列的最后一個有效元素的下一個元素

隊列空

Front 和rear的值相等,但不一定是零。

2.循環隊列入隊偽算法講解

52cdc1b6d10325d45d7e59a014ae1059.png

Rear=(rear+1)%數組的長度

//進隊,隊尾rear+1;

bool en_queue(QUEUE *pQ,int val)

{

if(full_queue(pQ))

{

return false;

}

else

{

pQ->pBase[pQ->rear]=val;

pQ->rear=(pQ->rear+1)%6;

}

}

循環隊列出隊偽算法講解

a9a7e2c36a6fa2a45d9056cbb24ea425.png

Front=(front+1)%數組的長度

//出隊,隊頭位置變為:(front+1)%6

bool out_queue(QUEUE *pQ,int *pVal)

{

if(emput_queue(pQ))

return false;

else

{ ??*pVal=pQ->pBase[pQ->front];

pQ->front=pQ->front+1;

return true;

}

}

4.判斷循環隊列是否已空

Front與rear的值相等,則該隊列為空。

5.如何判斷循環對了是否已滿

預備知識 :由于是循環隊列,front的值可能比rear大,可能比rear小,也能相等,兩者沒有規律。但是隊首旋轉的速度不能比隊尾快。

2fafdc25f103320b7084b1403bc73662.png

當存放元素的數目等于數組的存儲位置個數,則rear和front重合。分不清頭和尾。

所以我們少用一個存儲位置。

c語言偽算法表示是:

隊列滿的條件:if ((rear+1)%數組長度==front)已滿

Else 不滿

#include

#include

#include"stdbool.h"//解決不能使用bool

#include "malloc.h"

//隊定義

typedef struct Queue

{

int *pBase;//數組基地址,數組的首地址

int front;//隊頭

int rear;//隊尾巴

}QUEUE;

void init(QUEUE*);//創建循環隊列

bool en_queue(QUEUE*,int ); //入隊

void traverse_queue(QUEUE*);//遍歷

bool emput_queue(QUEUE* );//隊是否滿

bool full_queue(QUEUE *);//對列是否空

bool out_queue(QUEUE *,int *);//出隊

int main()

{

int Val;

QUEUE Q;

init(&Q);

en_queue(&Q,1);

en_queue(&Q,2);

en_queue(&Q,3);

en_queue(&Q,4);

en_queue(&Q,5);

traverse_queue(&Q );//遍歷

if(out_queue(&Q ,&Val))

{

printf("出隊成功,出隊的元素是%dn",Val);

traverse_queue(&Q );//遍歷

}

return 0;

}

//創建一個隊列,空間分配,保存6個整形元素。

void init (QUEUE *pQ)

{

pQ->pBase=(int*)malloc(sizeof(int)*6);//長度為6的數組

pQ->front=0;

pQ->rear=0;

}

//判斷循環隊列是否滿

bool full_queue(QUEUE *pQ)

{

if((pQ->rear+1)%6==pQ->front)

{

return true;

}

else

return false;

}

//進隊,隊尾rear+1;

bool en_queue(QUEUE *pQ,int val)

{

if(full_queue(pQ))

{

return false;

}

else

{

pQ->pBase[pQ->rear]=val;

pQ->rear=(pQ->rear+1)%6;

}

}

//利用中間變量,遍歷隊列

void traverse_queue(QUEUE *pQ)

{

printf("隊列遍歷結果如下n");

int i= pQ->front;

while(i!=pQ->rear)

{

printf("%d ",pQ->pBase[i]);

i=(i+1)%6;

}

printf("n");

return ;

}

bool emput_queue(QUEUE* pQ)

{

if(pQ->front==pQ->rear)

return true;

else

return false;

}

//出隊,隊頭front+1

bool out_queue(QUEUE *pQ,int *pVal)

{

if(emput_queue(pQ))

return false;

else

{ ??*pVal=pQ->pBase[pQ->front];

pQ->front=(pQ->front+1)%6;

return true;

}

}

cab20b7c3630f64add0e1f986563204d.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531870.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531870.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531870.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java中paint方法和paintComponent方法的不同

/*1.由Component.java源代碼中可以看見其中的paint()方法體是空的,在Container中重寫了該方法,其子類Window等也重寫了該方法2.由JComponent.java源代碼中可以看見其中的paint()方法中調用paintComponent, paintChildren, paintBo…

java office文件加水印_文檔預覽加水印——或可一用的防泄密方式

給文件加水印是常見的一種宣示版權的方式。像Office、WPS都自帶加水印功能,能夠給文檔加上"保密"、"嚴禁復制"這樣的水印。在多可系統中,也有這么一個添加水印的功能。啟用該功能后,在使用HTML5預覽時,多可系…

android 獲取apk資源,android-apk-parser

APK解析庫用于讀取/解析 packageName。versionName。versionCode信息的簡單類,以及已經編譯的androidsdk文件中的更多內容。通過解壓 AndroidManifest.xml 文件并解碼編譯好的XML二進制文件來收集這里信息,就可以實現。我一直在用它來實現各種android工件…

apache license 2.0如何使用防止法律糾紛_go語言使用Swaggo詳細教程

相信很多程序猿和我一樣不喜歡寫API文檔。寫代碼多舒服,寫文檔不僅要花費大量的時間,有時候還不能做到面面具全。但API文檔是必不可少的,相信其重要性就不用我說了,一份含糊的文檔甚至能讓前后端人員打起來。 而今天這篇博客介紹的…

靜態代碼塊,構造代碼塊,局部代碼塊演示

public class Test{static int num;static int numObj;//記錄有多少個對象產生!static{//靜態代碼塊, 是用來給類進行初始化的!//num 10;num;num *12;//沒有進入靜態代碼塊之前,num的初始化值是0System.out.println(num);//main(…

android執行main函數,AndroidStudio執行main方法報錯

問題:有時在開發中想直接寫一個java文件來測試一些東西,但是AndroidStudio執行的時候會報錯。代碼信息:public class HelloWorld {public static void main(String[] args) {System.out.println("HelloWorld");}}報錯信息12:04:41:…

模擬java.util.Collection一些簡單的用法

/* 需求:模擬java.util.Collection一些簡單的用法!注意:java虛擬機中并沒有泛型類型的對象。泛型是通過編譯器執行一個被稱為類型擦除的前段轉換來實現的。 1)用泛型的原生類型替代泛型。 原生類型是泛型中去掉尖括號及其中的類型…

hive 導出json格式 文件_Hive 系列 之 基本操作合集

下面是本課程概覽:(1)hive系列之簡介,安裝,beeline和hiveserver2(2)hive系列之基本操作(3)hive系列之udf(4)hive系列之二級分區和動態分區&#x…

android開發自定義view倍絲曲線,從0到1Android自定義View(四)貝塞爾曲線

原標題:從0到1Android自定義View(四)貝塞爾曲線2017年安卓巴士全球開發者論壇-上海站作者本文由兩點水投稿,博客地址:http://www.apkbus.com/myspaceblog-911082.html前言扯來扯去,前面三篇自定義 View 文章,終于扯完了…

如何保證對象的唯一性

/* 如何保證對象的唯一性:1.不允許其他程序用new來創建該類對象。2.在該類創建一個本類實例。3.對外提供一個方法讓其他程序可以獲取該對象的引用。 */ public class Test{public static void main(String[] args){//Subject sub Subject.oSub;//這種方法不可控&am…

ios kvo 要引入_騰訊社招iOS面試記錄

畢業好幾年了,上周發送了簡歷給騰訊,參加了騰訊面試。具體部門這邊就不說了。這次面試還是收獲到了很多。一面電話面試:面試官主要是針對iOS相關的基礎問題。先簡單自我介紹一下自己對mrc和arc的理解談談對自動釋放池的理解自動釋放池在mrc和…

動態設置html字號,動態設置html的font-size值 (適配文字大小)

PC端(function () {function setRootFontSize() {let rem, rootWidth;let rootHtml document.documentElement;//限制展現頁面的最小寬度rootWidth rootHtml.clientWidth < 1366 ? 1366 : rootHtml.clientWidth;// 19.2 設計圖尺寸寬 / 100( 設計圖的rem 100 )rem roo…

一個小例子對多態簡單的理解

class Parent{int age;String name;public Parent(String name, int age){this.name name;this.age age;}public void writeWay(){System.out.println("毛筆!");}}class Child extends Parent{int age;String name;//這里只說為了說明一個問題&#xff0c;其實完全…

運行shell腳本時怎么知道jdk路徑_Shell寫腳本關于ssh執行jar包,需要刷新JDK路徑的問題...

比如腳本中下面這一段ssh $i "java -jar /applog/$PROJECT/$APPNAME --server.port$SERVER_PORT >/dev/null 2>&1 &"免密登錄linux服務器&#xff0c;執行jar包&#xff0c;通過ssh執行java程序&#xff0c;涉及到一個找不到JDK路徑的問題&#xff0c;…

html 中加號的表示方法,CSS的+(加號)選擇器怎么用

在CSS中“”符號選擇器用于選擇緊跟在指定元素之后但不在特定元素內部的元素。下面本篇文章就來具體介紹一下&#xff0c;希望對大家有所幫助。“”符號選擇器在CSS中“”符號選擇器被稱為相鄰兄弟選擇器&#xff0c;用于選取在同一父元素下的&#xff0c;緊跟指定元素之后的另…

poj 1724ROADS(bfs和dfs做法)

1 /*2 dfs比較好想&#xff0c;就是測試數據的問題&#xff0c;導致在遍歷邊的時候要倒著遍歷才過&#xff01;3 */4 #include<iostream> 5 #include<cstdio>6 #include<cstring>7 #include<vector>8 #include<algorithm>9 #define Max 0x3f3f3f…

華為新系統 鴻蒙,旗艦CPU+鴻蒙OS!華為Mate家族重磅新品來襲

我們常說安卓平板的生態跟蘋果iPad有很大差距&#xff0c;不論是應用質量還是原生系統支持&#xff0c;蘋果都做的更好一些。可能也是因為這個原因&#xff0c;因此安卓平板&#xff0c;尤其是旗艦級別的平板至今除了三星之外&#xff0c;也就只有華為在做。作為安卓陣營兩大廠…

mysql中用來取余數的函數是_MySQL常用函數-單行處理函數-字符串處理函數(更新中...)...

本篇文章用到的數據庫表/* SQLyog Ultimate v12.09 (64 bit) MySQL - 5.7.23-log : Database - myemployees ********************************************************************* *//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE*/;/*!40014 SET OLD_UNIQUE_CHECKSUN…

HDU 1024Max Sum Plus Plus(最大m字段和)

/* 動態轉移方程&#xff1a;dp[i][j]max(dp[i-1]a[i], max(dp[t][j-1])a[i]) (j-1<t<i) 表示的是前i個數j個字段和的最大值是多少&#xff01; */ 1 #include<iostream> 2 #include<cstdio>3 #include<cstring>4 #define N 10000 5 using nam…

html盒子模型頁面居中,【靜態頁面架構】CSS之盒子模型

CSS架構盒子模型&#xff1b;以內容區(顯示文本和圖像)內邊距(內容區至邊距的距離)邊距(內容區的邊界)外邊距(元素的邊框之間的距離)1.邊距&#xff1b;border屬性&#xff1b;簡寫屬性用來設置邊距的上(top)右(right)下(bottom)左(left)。寬度&#xff0c;顏色和樣式div{width…