C ~ 鏈式隊列與循環隊列

? ? ? 此處的鏈式與循環隊列可以應用于BFS和樹的層序遍歷。下面是對其結構和基本操作的程序描述。

1、循環隊列

? ? 解決循環隊列的隊空和隊滿的方法:

? ? [1].增加一個參數count,用來記錄數組中當前元素的個數;

? ? [2].為避免隊空和滿兩狀態混淆,少用一個存儲空間,也就是數組最后一個存數空間不用,(rear+1)% QSIZE= front 時, 隊滿;

? ? ? ?a)判斷是否為空隊列:front==rearb)判斷隊列是否已滿:front=(rear+1)%size?

 1 typedef struct{      //隊列結構定義
 2     int front;
 3     int rear;
 4     int count;  //隊列元素計數
 5     int key[QSIZE];
 6 }BFSQueue;
 7 
 8 void InitBFSQueue(BFSQueue *BFSQ)  //隊列初始化
 9 {
10     BFSQ->front=0;  //front指向隊列第一個元素
11     BFSQ->rear=0;   //rear指向隊列中下一個空位
12     BFSQ->count=0;
13 }
14 int EmptyBFSQueue(BFSQueue *BFSQ) //
15 {
16     return BFSQ->count==0;
17 }
18 int FullBFSQueue(BFSQueue *BFSQ)  //滿
19 {
20     return BFSQ->count==QSIZE;
21 }
22 
23 void AddBFSQueue(BFSQueue *BFSQ,int num)  //插入
24 {
25     if(!FullBFSQueue(BFSQ))
26     {
27         BFSQ->count++;
28         BFSQ->key[BFSQ->rear]=num;
29         BFSQ->rear=(BFSQ->rear+1) % QSIZE;
30     }
31 }
32 
33 int DelBFSQueue(BFSQueue *BFSQ)  //刪除
34 {
35     int temp;
36     if(!EmptyBFSQueue(BFSQ))
37     {
38         BFSQ->count--;
39         temp=BFSQ->key[BFSQ->front];
40         BFSQ->front=(BFSQ->front+1) % QSIZE;
41         return temp;
42     }
43     else
44         return NULL;
45 }
46 /******************************************************************/

2、鏈式隊列

 1 typedef struct QNode{  // 隊列元素結構  
 2     int key;
 3     struct QNode *next;
 4 }QNode;
 5 typedef struct{  // 隊列結構 
 6     QNode *front;
 7     QNode *rear;
 8     int count;
 9 }BFSQueue;
10 
11 void InitBFSQueue(BFSQueue *BFSQ)  //隊列初始化
12 {
13     BFSQ->front=NULL;  
14     BFSQ->rear=NULL; 
15     BFSQ->count=0;
16 }
17 int EmptyBFSQueue(BFSQueue *BFSQ) //
18 {
19     return BFSQ->count==0;
20 }
21 
22 void AddBFSQueue(BFSQueue *BFSQ,int num)  //插入
23 {
24     QNode *np=(QNode *)malloc(sizeof(QNode));
25     np->key=num;
26     np->next=NULL;
27       //BFSQ->count++;
28 
29     if(!EmptyBFSQueue(BFSQ))  // 隊列非空
30     {        
31         BFSQ->rear->next=np;
32         BFSQ->rear=np;
33     }
34     else                      // 隊列空
35     {
36         BFSQ->rear=np;
37         BFSQ->front=np;
38     }
39     BFSQ->count++;
40 }
41 int DelBFSQueue(BFSQueue *BFSQ)  //刪除
42 {
43     int temp;
44     QNode *tp=(QNode *)malloc(sizeof(QNode));
45     if(!EmptyBFSQueue(BFSQ)) //隊列非空
46     {
47           //BFSQ->count--;  //注意,必須在隊列判定之后增加或減小count的值///
48         tp=BFSQ->front;
49         temp=tp->key;
50         if(BFSQ->count==1)  //出隊后隊列為空
51         {
52             BFSQ->rear=NULL;
53             BFSQ->front=NULL;
54         }
55         else  //出隊后隊列非空
56         {
57             BFSQ->front=tp->next;
58         }        
59         BFSQ->count--;
60         free(tp);  //釋放暫存指針
61 
62         return temp;
63     }
64     else
65         return NULL;
66 }

轉載于:https://www.cnblogs.com/wjcx-sqh/p/5929927.html

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

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

相關文章

Hexo之部署github

最近開始學NodeJs,準備也在github上弄個一個Hexo博客練練過程中遇到一些問題總結一下。希望對遇到同樣問題的同學能有個幫助少走一些彎路。 - 其實用windows或mac客戶端直接去同步很順利沒遇到什么問題。主要是在使用Hexo deploy命令的時候。 我的配置文件deploy部分…

You have unstaged changes.

執行git rebase出錯 原因:有未提交的修改 解決:執行git stash暫時保存修改,rebase后,執行git stash pop

[bootstrap] 打造一個簡單的系統模板(1) 左側折疊菜單

1. 前言 最近需要做一個后臺管理系統,我打算使用bootstrap弄一個好看的后臺模板。網上的好多模板我覺的css和js有點重。 于是就打算完全依靠bootstrap搭建一個屬于自己的模板。 首先從左側的折疊菜單開始。看圖。 2. CSS 代碼 以下是自定義的css代碼,由于…

將gcc/g++鏈接到指定版本

安裝指定版本: sudo apt-get install gcc-4.8 sudo apt-get install g-4.8以上命令默認安裝的為4.8.5版本,支持c11 建立軟連接 cd /usr/bin如果已經裝有gcc或者g,需要先移除原先的軟連接sudo rm gcc sudo rm g建立新的軟連接 sudo ln -s g…

23種設計模式的優點與缺點概況

設計模式 標簽(空格分隔): 設計模式優點 應用場景 整理自《設計模式之禪》 單例模式 優點: 只有一個實例,減少了內存開支;可以避免對系統資源的多重占用;可以在系統中設置全局的訪問點&#xff…

How Many Shortest Path

zoj2760:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode2760 題意:給你一張有向帶權圖,然后問你最短路徑有多少條。 題解:這一題用到了網絡流,一開始,我想到用找到一條最短路,然后刪除這條…

pat00-自測5. Shuffling Machine (20)

00-自測5. Shuffling Machine (20) 時間限制400 ms內存限制65536 kB代碼長度限制8000 B判題程序Standard作者CHEN, YueShuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techniques are seen as weak, and in order to avoid …

E488: Trailing characters:

情景: 對vim進行配置,配置完成后進行保存,配置完成后打開其他文件時報錯。原因: vim 配置文件中保存不合乎語法的語句,報錯時如下: #顯示行號 set number#字符導致的錯誤,改成"即可。 vi…

移動web開發總結

1、-webkit-tap-highlight-color:rgba(255,255,255,0)可以同時屏蔽ios和android下點擊元素時出現的陰影。 備注:transparent的屬性值在android下無效。2、-webkit-appearance:none可以同時屏蔽輸入框怪異的內陰影。3,/*去除android瀏覽器下a/input等元素獲得焦點時高…

人物角色群體攻擊判定二(叉乘來判斷敵人的位置)

建議閱讀: 判斷敵人在玩家的某一個區域: http://www.cnblogs.com/plateFace/p/4716799.html 我們可以根據玩家和敵人的坐標, 進行叉乘來獲取一個向量可以用它來判斷敵人的位置, 敵人是否在攻擊范圍內. 下面我簡單實現下對單體敵人是否攻擊做判定 這種方式有一種重大的BUG, 假設…

更改linux子系統軟件源為國內鏡像

cd /etc/apt/sudo cp sources.list sources.list.back20190831sudo vim sources.list執行vim替換命令 :%s/archive.ubuntu/mirrors.aliyun/g:%s/security.ubuntu/mirrors.aliyun/g執行sudo apt update即可。

[Z] Linux下進程的文件訪問權限

原文鏈接:http://blog.csdn.net/chosen0ne/article/details/10581883對進程校驗文件訪問權限包括兩個部分,一是確定進程的角色(屬于哪個用戶或者組),二是確定對應的角色是否具有該操作的權限。 首先看第一部分。默認情…

HDU 5371 Manacher Hotaru's problem

求出一個連續子序列,這個子序列由三部分ABC構成,其中AB是回文串,A和C相同,也就是BC也是回文串。 求這樣一個最長的子序列。 Manacher算法是在所有兩個相鄰數字之間插入一個特殊的數字,比如-1, Manacher算法…

MySQL CURDATE() 函數

定義和用法 CURDATE() 函數返回當前的日期。 語法 CURDATE() 實例 例子 1 下面是 SELECT 語句: SELECT NOW(),CURDATE(),CURTIME() 結果類似: NOW()CURDATE()CURTIME()2008-12-29 16:25:462008-12-2916:25:46例子 2 下面的 SQL 創建帶有日期時間列 (Orde…

平庸技術流,用 WebApi +AngularJS 實現網絡爬蟲

最近園子里網絡爬蟲很火爆,從 PHP 到 Python,從 windows服務 到 winform 程序,各路大神各顯神通。小弟也獻下丑,從平庸流出發,簡述下 WebApi AngularJS 方式實現網絡爬蟲。 一、技術框架 1.1 前端: Angular…

linker `cc` not found

運行rustc hello_world.rs時出錯。原因: 我的 gcc 是安裝的指定版本 gcc-4.8,安裝指定版本 gcc 可參考我的另一篇博文,這里找不到 cc 的原因是在移除原來軟鏈的時候,cc 的軟鏈也移除了。重新建立軟鏈即可。 sudo ln -s gcc cc還有…

C# 通過服務啟動窗體(把窗體添加到服務里)實現用戶交互的windows服務[轉發]...

由于個人需要,想找一個鍵盤記錄的程序,從網上下載了很多,多數都是需要注冊的,另外也多被殺軟查殺。于是決定自己寫一個,如果作為一個windows應用程序,可以實現抓取鍵盤的記錄。想要實現隨系統啟動的話&…

error: default argument given for parameter 4

原因&#xff1a;定義函數的時候參數部分有默認值&#xff0c;如下&#xff1a; int classA::print(int a 0) {std::cout << a << std::endl; }分析&#xff1a;聲明函數時參數可以有默認值&#xff0c;定義時不能。

python2.7虛擬環境virtualenv安裝及使用

一 、虛擬環境virtualenv安裝 1. 安裝virtualenv 將Python的目錄添加到系統環境變量后&#xff0c;在命令行輸入&#xff1a; pip install virtualenv C:\Users\heroicai\Desktop>pip install virtualenv2. 建立虛擬環境 在桌面上建立建立一個虛擬環境myenv,輸入:virtualenv…

Io 異常: The Network Adapter could not establish the connection

Io 異常: The Network Adapter could not establish the connection 這個異常的出現一般與數據庫和你的PC的設置有關 這種異常的出現大致上有下面幾種&#xff1a; 1。IP錯誤。 在設置URL時錯誤&#xff0c;例如&#xff1a;jdbc:oracle:thin:192.168.0.36:1521:sharp 數據庫服…