黑馬程式設計師 學習筆記 資料結構 棧與佇列

2021-07-04 09:07:35 字數 2276 閱讀 8451

一、棧

棧是限制在表的一端進行插入和刪除的線性表。允許插入、刪除的這一端稱為棧頂,另乙個固定端稱為棧底。當表中沒有元素時稱為空棧。如圖3.1.1 所示棧中有三個元素,進棧的順序是a1、a2、a3,當需要出棧時其順序為a3、a2、a1,所以棧又稱為後進先出的線性表(last in first out),簡稱lifo 表。

⑴ 置空棧:首先建立棧空間,然後初始化棧頂指標。

seqstack *init_seqstack()

⑵ 判空棧

int empty_seqstack(seqstack *s)

⑶ 入棧

int push_seqstack (seqstack *s, datatype x)

}⑷ 出棧

int pop_seqstack(seqstack *s, datatype *x)

/*棧頂元素存入*x,返回*/

}⑸ 取棧頂元素

datatype top_seqstack(seqstack *s)

二、鏈棧

用鏈式儲存結構實現的棧稱為鏈棧。通常鏈棧用單鏈表表示,因此其結點結構與單鏈表的結構相同,在此用linkstack 表示,即有:

typedef struct node

stacknode,* linkstack;

⑴ 置空棧

linkstack init_linkstack()

⑵ 判棧空

⑶ 入棧

linkstack push_linkstack(linkstack top, datatype x)

⑷ 出棧

linkstack pop_linkstack (linkstack top, datatype *x)

}三、佇列

插入在表一端進行,而刪除在表的另一端進行,這種資料結構稱為隊或佇列,把允許插入的一端叫隊尾(rear) ,把允許刪除的一端叫隊頭(front)。如圖3.11 所示是乙個有5 個元素的佇列。入隊的順序依次為a1、a2 、a3 、a4 、a5 ,出隊時的順序將依然是a1、a2 、a3 、a4 、a5 。

顯然,佇列也是一種運算受限制的線性表,所以又叫先進先出表。

⑴ 置空隊

c_sequeue* init_sequeue()

⑵ 入隊

int in_sequeue ( c_sequeue *q , datatype x)

else

}⑶ 出隊

int out_sequeue (c_sequeue *q , datatype *x)

else

}⑷ 判隊空

int empty_sequeue(c_sequeue *q)

鏈式儲存的隊稱為鏈隊。和鏈棧類似,用單鏈表來實現鏈隊,根據隊的fifo 原則,為了操作上的方便,我們分別需要乙個頭指標和尾指標,如圖3.15 所示

鏈隊的基本運算如下:

(1) 建立乙個帶頭結點的空隊:

lqueue *init_lqueue()

(2) 入隊

void in_lqueue(lqueue *q , datatype x)

(3) 判隊空

int empty_lqueue( lqueue *q)

(4) 出隊

int out_lqueue(lqueue *q , datatype *x)

/*隊空,出隊失敗*/

else

}

黑馬程式設計師 學習筆記 資料結構 概念

資料結構與數學 計算機硬體和軟體有十分密切的關係。資料結構是介於數學 計算機硬體和計算機軟體之間的一門電腦科學與技術專業的核心課程,是高階程式語言 編譯原理 作業系統 資料庫 人工智慧等課程的基礎。同時,資料結構技術也廣泛應用於資訊科學 系統工程 應用數學以及各種工程技術領域。資料結構課程集中討論軟...

黑馬程式設計師 學習筆記 資料結構 順序表

一 儲存 線性表的順序儲存是指在記憶體中用位址連續的一塊儲存空間順序存放線性表的各元素,用這種儲存形式儲存的線性表稱其為順序表。因為記憶體中的位址空間是線性的,因此,用物理上的相鄰實現資料元素之間的邏輯相鄰關係是既簡單,又自然的。如圖2.1 所示。設a 的儲存位址為loc a 每個資料元素佔d個儲存...

筆記 資料結構 棧

特性 先進後出,不可訪問索引,只能逐漸推入推出 介面inte ce istackds 得到棧中資料個數,屬性 int getlength 同上,方法型別的 bool isempty 檢驗是否為空 void clear 清空 void push t item 推入資料 t pop 獲得棧頂資料並刪去 ...