Ⅰ 數據結構—隊列
隊列 (queue)是一種先進先出的線性表。它只允許在表的一端進行插入,在另一端進行刪除,這如同我們日常生活中的排列是一致的,最早入隊的元素最早離開。
隊尾 (rear)是隊列中允許插入的一端, 隊頭 (front)是隊列中允許刪除的一端。
隊列如同棧一樣,也同樣有兩種存儲表示,分別是順序表示和鏈式表示。
和順序棧類似,在隊列的順序存儲結構中,除了用一組地址連續的存儲單元依次存放從隊列頭到對列尾的元素之外,需要設置兩個指針front和rear分別指示隊列頭元素和尾元素的位置。
隊列的順序存儲結構表示如下:
為方便C語言描述起見,約定:初始化建空隊列時,front=rear=0,每當插入新元素至隊尾時,「尾指針增一」,每當刪除頭元素時,「頭指針增一」。因此,在非空隊列中,頭指針始終指向隊列頭元素,而尾指針始終指向隊尾元素的下一個位置。
循環對列 是將順序隊列變成一個環狀的空間,用這種方法可以解決隊列「假溢出」問題。
「假溢出」 是指隊列實際可用空間沒有占滿,但是不能向隊列中添加新的隊尾元素,否則會出現溢出的現象的情況。
在循環隊列中,頭尾指針以及隊列元素之間的關系不發生改變物皮,只是在循環隊列中頭尾態團指針「依次循環增一」的操作可用模運算實現。通過取模,頭指針和尾指針就可以在順序表空間內以頭尾銜接的方式「循環」移動。
循環隊列的基本操作演算法描述罩閉差:
鏈隊是指採用鏈式存儲結構實現的隊列。通常鏈隊用單鏈表來表示,一個鏈隊顯然需要兩個分別指示對頭和隊尾的指針(分別稱為頭指針和尾指針)才能唯一確定。為了操作方便,同線性表的單鏈表一樣,為鏈隊添加頭結點,並規定頭指針始終指向頭結點。
鏈隊列存儲結構表示如下:
鏈隊操作即為單鏈表插入和刪除操作的特殊情況,只是需要進一步修改尾指針或頭指針。
鏈隊列的基本操作演算法描述: