複製鏈接
請複製以下鏈接發送給好友

順序隊列

鎖定
順序隊列是隊列順序存儲結構,順序隊列實際上是運算受限的順序表。和順序表一樣,順序隊列用一個向量空間來存放當前隊列中的元素。由於隊列的隊頭和隊尾的位置是變化的,設置兩個指針front和rear分別指示隊頭元素和隊尾元素在向量空間中的位置,它們的初值在隊列初始化時均應設置為0。 [1] 
中文名
順序隊列
外文名
sequential queue

順序隊列應用背景

在現實世界中存在很多隊列的實例。例如,在電影院的售票窗口排隊等待買票的人,就是通過隊列這種數據結構組織在一起的。人們按先來後到的順序排成一隊,最先買到票的人就是最先來的人。當某人買完票,他就會從隊列的最前端離開,這就相當於刪除操作。而添加的操作卻僅能在隊列的尾部進行,因此新來的人就只能排在隊列的最後。此外,還有像公共汽車站人們排隊等車、醫院中病人排隊候診等都是顯示生活中隊列的例子。 [2] 

順序隊列表示方法

順序隊列通常採用一維數組進行存儲。其中,連續的存儲單元依次存放隊列中的元素。同時,使用兩個指針分別表示數組中存放的第一個元素和最後一個元素的位置。其中,指向第一個元素的指針被稱為隊頭指針front,指向最後一個元素的位置的指針被稱為隊尾指針rear。 [3] 
在實際編程過程中,通常設隊頭指針指向隊列的第一個元素,隊尾指針指向隊尾元素的後一個位置。front和rear的初值在隊列初始化時均應置為0;入隊時將新元素插入rear所指的位置,然後將rear加1。出隊時,刪去front所指的元素,然後將front加1並返回被刪元素:由此可見,當頭尾指針相等時隊列為空。在非空隊列裏,頭指針始終指向隊頭元素,而尾指針始終指向隊尾元素的下一個位置。 [4] 

順序隊列基本操作

入隊時:將新元素插入rear所指的位置,然後將rear加1。
出隊時:刪去front所指的元素,然後將front加1並返回被刪元素。
注意:
(1)當頭尾指針相等時,隊列為空。
(2)在非空隊列裏,隊頭指針始終指向隊頭元素,隊尾指針始終指向隊尾元素的下一位置。 [5] 

順序隊列存在問題

在普通順序隊列中,入隊操作就是先將尾指針rear後移一個單元(rear++),然後將元素值賦給rear單元(data[rear]=X)。出隊時.則是頭指針front後移(front++)。像這樣進行了一定數量入隊和出隊操作後,可能會出現這樣的情況:尾指針rear已指到數組的最後一個元素.即rear==MAXLEN-1.此時若再執行入隊操作,便會出現隊滿“溢出”。然而,由於在此之前可能也執行了若干次出隊操作.因而數組的前面部分可能還有很多閒置的元素空間,即這種溢出並非是真的沒有可用的存儲空間,故稱這種溢出現象為“假溢出”。顯然,必須要解決這一似溢出的問題,否則順序隊列就沒有太多使用價值。 [6] 
參考資料
  • 1.    肖憲華編著.從零開始學C語言 實戰案例版:中國鐵道出版社,2013.12
  • 2.    陳娟編著.從零開始學C語言:中國鐵道出版社,2012.07
  • 3.    陳鋭,葛麗萍編著.跟我學數據結構:清華大學出版社,2013.09
  • 4.    李素若,陳萬華.遊明坤編著,數據結構(C語言描述):中國水利水電出版社,2014.07
  • 5.    王麗芳,張靜,李富萍等編著.計算機科學導論:清華大學出版社,2012.01
  • 6.    胡學鋼總主編;胡學鋼,張先宜主編;史君華,強俊,黃曉梅,姜飛,陳景霞,韓鳳英副主編.數據結構:安徽大學出版社,2015.02