循環隊列C語言實現數據結構
循環隊列C語言實現數據結構
下載地址
格格是一枚應用技術專業的專科在校生很願意和各位大佬交流如果大家有願意
1 入隊列
2 出隊列
3 列印隊列
1 程序的結構
2 程序源碼
1 建立循環隊列
2 置空隊列
3 入隊
4 出隊
5 列印隊
想要一起學習C++的可以加裙六二六八七一九一六,裙內有各種資料滿足大家,歡迎加裙
目錄
一 要求
二 循環隊列
三 循環隊列的演算法設計
四 程序
五 程序測試
六 源程序及封裝軟體下載
(一) 要求
假設以數組sequ[m]存放循環隊列的元素,同時設變數rear和quelen 分別指示循環隊列中隊尾元素的位置和內含元素的個數。編寫實現該循環隊列的入隊和出隊操作的演算法。提示:隊空的條件:sq->quelen==0;隊滿的條件:sq->quelen==m。
想要一起學習C++的可以加裙六二六八七一九一六,裙內有各種資料滿足大家,歡迎加裙
(二) 循環隊列
定義:為充分利用向量空間,克服」假溢出」現象的方法是:將向量空間想像為一個首尾相接的圓環,並稱這種向量為循環向量。存儲在其中的隊列稱為循環隊列(Circular Queue)。這種循環隊列可以以單鏈表的方式來在實際編程應用中來實現, 當然也可以利用順序表來實現。順序表就是我們熟悉的數組 eg. sun[] 。
回顧:我們再來回顧一下關於順序隊列的重要知識點。隊列通常與棧對應,棧是一種後進先出的單端(尾端)處理的數據結構;那麼與之對應的隊列是一種先進先出的雙端(頭尾兩端)的數據結構。隊列的特點就是在一段進行入隊(存儲數據)操作,在另一端進行出隊(刪除數據)操作。
為什麼設計循環隊列:大家在處理隊列的時候,會遇到如下情況。例如說:我們的隊列空間能夠容納1000個元素。首先,格格入隊1000個元素,隊列上溢,此時為「真溢出」。那麼現在我們進行出隊操作,我們一直出隊,一直出隊, 知道1000個元素全部被刪除,此時我們發現隊列仍然處於「上溢」狀態,why? 其實原因很簡單,在非循環隊列當中,無論我們的front指(偏移)到哪裡,只要我們的rear指(偏移)向上闕,那麼隊列就是「滿溢」的。這就造成了空間明明還被佔據著,但是隊列卻已經無用武之地的窘境。對於空間有限的計算機來說,這無疑是一種浪費。也不是一個優秀的程序猿想要看到的。所以在這種情況下,循環隊列誕生了。循環隊列當中的「滿溢」只有一種情況,那就是所有數據空降都被佔領了。而不會存在非循環隊列當中的「假溢出」現象。
我們所常見的順序循環隊列通常有兩種數據結構。
結構一
typedef struct{
結構二
那通過觀察這兩種機構我們能夠很容易的發現,數據結構並不是固定的。我們覺得那種演算法比較更合理,我們覺得哪種數據結構方便我們設計演算法,那麼我們就建立哪種數據結構。在本文當中,我們採用第二種數據結構。顯而易見的是,當我們採用第二種數據結構時,我們建立的一個隊列指針(qu*sq)隊空的條件:sq->quelen==0;隊滿的條件:sq->quelen==m。
(三) 循環隊列的演算法設計
在上面我們了解了循環隊列的數據機構,但是僅僅學會了數據結構還遠遠不夠。我們設計數據結構的目的是為了更好的存儲數據,並利用數據。下面我們來看一看關於循環隊列我們要掌握哪些最基本的演算法(利用數據機構)。
3.1 建立循環隊列
//建立隊qu* creatqueue();//函數聲明qu* creatqueue()//函數實現{
3.2 置空隊列
//置空隊void setnull(qu*);//函數聲明void setnull(qu *sq)//函數實現{
3.3 入隊
//入隊void enqueue(qu*, datatype);//函數聲明void enqueue(qu*sq, datatype x)//函數實現
3.4 出隊
//出隊datatype *dequeue(qu*);//函數聲明datatype *dequeue(qu*sq)//函數實現
3.5 列印隊
//列印隊
(四) 程序
下面我們來設計一個程序測試我們的數據機構與演算法
4.1 程序的結構
4.2 程序源碼
注意:該程序由Microsoft Visual Studio Enterprise 2015編譯器進行調試。受制於編譯器品牌及版本不同等不可抗因素造成的編譯失敗,請自行調整。
#include#include#include#define m 5//循環隊列的結構類型定義typedef int datatype;typedef struct{
(五) 程序測試
5.1 入隊列
5.2 出隊列
5.3 列印隊列
前面已經用到了列印隊列,所以格格不再贅述,大家由5.2&5.3可知列印隊列是成功的。
(六) 源程序及封裝軟體下載
下載地址:http://pan.baidu.com/s/1jIKGfaA
看到這裡順便關注一下小編吧持續更新!本文轉載。
想要一起學習C++的可以加裙六二六八七一九一六,裙內有各種資料滿足大家,歡迎加裙
※c語言排序演算法之快速排序,輕鬆掌握快排
※C語言編程,首先你得懂這些!虛擬機及配置環境篇
※C語言編程——模擬系統刪除文件
※c語言演算法之遞歸,遞歸其實很簡單
TAG:C加加 |
※數據結構與演算法分析——C語言描述
※C語言字元串相關函數實現
※C 語言動態數組
※兩種方式實現C語言訪問MCU寄存器
※現象學與語言分析
※C語言編程入門基礎結構體和指針
※如何用 C 語言實現模糊搜索?
※身體語言在舞蹈中表現的動律規則
※當代藝術設計語言的表現形式
※Go 語言變數作用域
※寵物語言翻譯器實現在即
※「體驗式」建築和現代極簡設計語言締造者
※詳解 BP 神經網路基本原理及 C 語言實現
※AWS自然語言處理服務新功能!從複雜文本中提取內容並客制化分類
※用R語言實現對不平衡數據的四種處理方法
※C語言數據類型、常量和變數
※循環語句是C語言新手的入門基礎,要紮實練習,孰能生巧
※現代水彩語言的詮釋
※網路語言VS傳統文化 材料作文
※從語言語素—音節編碼類型看世界語言分類