棧和佇列是插入、刪除受限制(只能在表的一端插入、刪除,不能從中間插入、刪除)的線性表。
它們的儲存結構,以及儲存結構下不同操作的屬性和普通線性表是一樣的。因為受限制,理解起來反而更簡單。
棧(lifo—last in first out)是後進先出的線性表,採用順序儲存時,稱順序棧;採用鏈式儲存時,稱鏈棧。
允許插入和刪除的稱為棧頂;另一端稱為棧底。空棧出棧稱「下溢」,滿棧入棧稱「上溢」。
順序棧的進棧操作:1、棧頂下標值加1;2、棧頂賦值。
順序棧的出棧操作:1、棧頂下標值減1。
順序棧的取棧頂元素操作:按下標值直接取,時間複雜度為o(1)(順序表也是直接取o(1))。
鏈棧的進棧操作(前插):1、新增結點指向後繼結點;2、頭結點指向新增結點。【棧只能在棧頂進行操作,因此只能用前插演算法,刪除操作類似。】
鏈棧的出棧操作:1、取出棧頂元素;2、頭結點指向原棧頂的下乙個結點;3、釋放原棧頂元素。
鏈棧的取棧頂元素操作:根據指標走向直接取(相當於單鏈表定位演算法中的最優情況——取首結點),時間複雜度為o(1)。
佇列(fifo—first in first out)是先進先出的線性表,採用順序儲存時,稱順序佇列;採用鏈式儲存時,稱鏈佇列。
順序佇列因為操作在表的兩頭,首指標front,尾指標rear。往往用迴圈佇列解決「假溢位」,因此順序佇列常用迴圈佇列。
迴圈佇列因為是環狀的,通常用取餘操作確定儲存位置。
無論迴圈佇列空還是滿都有front=rear,因此一般設定佇列元素只剩下乙個單元(.rear+1)是認為隊滿。
迴圈佇列的入佇列操作:1、rear值加1;2、新增結點賦值。【入佇列都是從隊尾處入,出佇列都是從隊首處出。】
迴圈佇列的出佇列操作:1、front值加1。
迴圈佇列的取佇列首元素:1、取當前front+1的值。
鏈佇列是動態申請空間,不會出現佇列滿的情況,front=rear時,隊列為空。
鏈佇列的入佇列操作:1、原尾結點指向新增結點;2、重置佇列rear。
鏈佇列的出佇列操作:1、取出原首結點;2、頭結點指標指向新首結點;3、釋放原首結點。
鏈佇列的取佇列首元素:直接取當前首結點值。
陣列是線性表的一種推廣,其規律也符合一般線性表的規律。在類c語言的編譯程式中,陣列採用的是以行為主序的儲存方法,也有以列為主序的儲存方法。
資料結構 線性結構 佇列
陣列佇列 public class arrayqueuedemo class arrayqueue 判斷佇列是否已滿 public boolean isfull 判斷佇列是否為空 public boolean isempty 新增資料佇列 public void add int n rear arr...
資料結構 線性結構 佇列
include include include queue的鍊錶實現及常用操作 鍊錶帶頭結點 define elemtype int struct queue typedef struct queue queue void init queue queue front,queue back 初始化乙...
資料結構 線性結構(線性表 棧與佇列)
線性表的抽象定義集合a和集合b的並集操作線性表的順序儲存的結構 位址計算獲得元素操作 getelem插入操作 listinsert刪除操作 lisedelete優缺點比較。線性表的單鏈表儲存結構 linklistgetelemlistinsertlistdeletecreatelisthead 頭插...