五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

順序隊列詳解(C語言實現(xiàn))

2023-07-12 17:45 作者:解學(xué)武  | 我要投稿

順序隊列指的是用順序表模擬實現(xiàn)的隊列存儲結(jié)構(gòu)。

我們知道,隊列具有以下兩個特點:

  1. 數(shù)據(jù)從隊列的一端進,從另一端出;

  2. 數(shù)據(jù)的入隊和出隊遵循"先進先出"的原則;

在順序表的基礎(chǔ)上,只要元素進出的過程遵循以上兩個規(guī)則,就能實現(xiàn)隊列結(jié)構(gòu)。

順序隊列的具體實現(xiàn)

通常情況下,我們采用 C 語言中的數(shù)組實現(xiàn)順序表。既然用順序表模擬實現(xiàn)隊列,必然要先定義一個足夠大的數(shù)組。不僅如此,為了遵守隊列中數(shù)據(jù)從 "隊尾進,隊頭出" 且 "先進先出" 的規(guī)則,還需要定義兩個變量(top 和 rear)分別記錄隊頭和隊尾的具體位置,如圖?1 所示:

順序隊列實現(xiàn)示意圖
圖 1 順序隊列實現(xiàn)示意圖


初始狀態(tài)下,順序隊列中沒有任何元素,因此 top 和 rear 重合,都位于 a[0] 處。

實現(xiàn)入隊

在圖 1 的基礎(chǔ)上,當(dāng)有新元素入隊時,依次執(zhí)行以下兩步操作:

  1. 將新元素存儲在 rear 記錄的位置;

  2. 更新 rear 的值(rear+1),記錄下一個空閑空間的位置,為下一個新元素入隊做好準(zhǔn)備。

例如,在圖 1 基礎(chǔ)上將?{1,2,3,4}?用順序隊列存儲的實現(xiàn)操作如圖 2 所示:


圖 2 數(shù)據(jù)進順序隊列的過程實現(xiàn)示意圖


入隊操作的 C 語言實現(xiàn)代碼如下:

實現(xiàn)出隊

當(dāng)有元素出隊時,根據(jù)“先進先出”的原則,目標(biāo)元素以及在它之前入隊的元素要依次從隊頭出隊。

出隊操作的實現(xiàn)方法很簡單,就是更新 top 的值(top+1)。例如,在圖 2 基礎(chǔ)上,順序隊列中元素逐個隊列的過程如圖 3 所示:

數(shù)據(jù)出順序隊列的過程示意圖
圖 3 數(shù)據(jù)出順序隊列的過程示意圖

注意,雖然數(shù)組中仍保存著 1、2、3、4 這些元素,但隊列中的元素是依靠 top 和 rear 來判別的,因此圖 3b) 顯示的隊列中確實不存在任何元素。

出隊操作的 C 語言實現(xiàn)代碼為:

順序隊列的完整實現(xiàn)代碼

使用順序表模擬實現(xiàn)順序隊列的 C 語言代碼為:

程序輸出結(jié)果:

出隊元素:1
出隊元素:2
出隊元素:3
出隊元素:4
隊列已空,出隊執(zhí)行失敗

順序隊列的缺陷

圖 2b) 是所有數(shù)據(jù)入隊成功的示意圖,圖 3b) 是所有數(shù)據(jù)出隊后的示意圖,對比兩張圖會發(fā)現(xiàn),top 和 rear 重合位置變成了? a[4] 而不再是 a[0]。

也就是說,在元素不斷入隊、出隊的過程中,順序隊列會整體向順序表的尾部移動。整個實現(xiàn)方案存在的缺陷是:

  • 順序隊列前面的空閑空間無法再被使用,會造成空間浪費;

  • 當(dāng)順序隊列移動至順序表尾部時,即便順序表中有空閑空間,新元素也無法成功入隊,我們習(xí)慣將這種現(xiàn)象稱為“假溢出”。

下篇文章,我會教大家順序隊列的另一種實現(xiàn)方案,可以徹底彌補以上兩個缺陷。

順序隊列詳解(C語言實現(xiàn))的評論 (共 條)

分享到微博請遵守國家法律
藁城市| 万山特区| 山丹县| 独山县| 乌拉特后旗| 清远市| 加查县| 皮山县| 德阳市| 安西县| 青海省| 彰化县| 沙雅县| 梨树县| 黑龙江省| 宁国市| 江川县| 华亭县| 闸北区| 新巴尔虎右旗| 马鞍山市| 探索| 六枝特区| 江达县| 东安县| 寻乌县| 响水县| 包头市| 渭源县| 齐河县| 镶黄旗| 镇安县| 化州市| 长丰县| 阿拉尔市| 古丈县| 黄骅市| 大邑县| 嵊州市| 湟源县| 黄梅县|