資料結構 佇列ADT的實現

2021-10-05 05:48:41 字數 1940 閱讀 6370

佇列是一種特殊的線性表,資料元素之間是線性關係,其插入和刪除操作分別在兩邊進行,一端只能插入,另一端只能刪除。

隊首(front):進行刪除操作的一端;

隊尾(rear):進行插入操作的一端;

入隊:在隊尾插入乙個元素;

出隊:在隊首插入乙個元素;

特性:元素的操作順序符合「先進先出(fifo)」或「後進後出(lilo)」。

我以鏈式隊列為例子講解佇列的一般操作。

鏈式佇列的儲存方式同一般的鏈式表的儲存結構完全相同;佇列與棧不同的是,佇列兩端都有操作,為了方便,需要設定兩個指示器(front和rear),而棧只在一端操作,只需要乙個指示器。

接下來說一下鏈式佇列c++類實現。

1.鏈式佇列的類定義:

//佇列節點類的定義

struct queuenode

};

//佇列類的定義

class linkedqueue//建構函式

~linkedqueue()//析構函式

bool enqueue(int x);//入隊

bool dequeue();//出隊

bool getfront();//取隊首元素

void makeempty();//佇列置空

bool isempty() const//佇列判空

int getsize();//求佇列長度

};

2.成員函式的實現:

(1)置空佇列操作:同單鏈表釋放

void linkedqueue::makeempty()

};

(2)入隊操作:分為隊列為空和佇列不空兩種情況

//入隊

bool linkedqueue::enqueue(int x)

else

return true;

};

(3)出隊操作:隊頭出去乙個,隊頭指標後移乙個節點

//出隊

bool linkedqueue::dequeue()

return k;

};

完整adt**:

#include using namespace std;

//佇列節點類的定義

struct queuenode

};//佇列類的定義

class linkedqueue//建構函式

~linkedqueue()//析構函式

bool enqueue(int x);//入隊

bool dequeue();//出隊

bool getfront();//取隊首元素

void makeempty();//佇列置空

bool isempty() const//佇列判空

int getsize();//求佇列長度

};void linkedqueue::makeempty()

};//入隊

bool linkedqueue::enqueue(int x)

else

return true;

};//出隊

bool linkedqueue::dequeue()

return k;

};

測試:

佇列ADT實現

佇列也比較的簡單,先進先出。流行的做法也是用陣列實現。結構體如下 struct queue include include struct queue typedef struct queue queue 建立乙個空的佇列 形參代表這個佇列的長度最大是多少 queue createqueue int ...

資料結構 棧ADT

棧 stack 是限定僅在表尾插入和刪除操作的線性表 允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 我們可以模擬手槍彈夾,瀏覽器的後退和前進等等都是棧 棧的插入操作,稱為進棧,也稱壓棧 入棧 push 棧的刪除操作,稱為出棧,也稱為彈棧 pop 棧本身就是乙個線性表,線性表的順...

資料結構與演算法分析筆記(c ) 佇列ADT

像棧一樣,佇列 queue 也是表。然而,使用佇列時插入是在一端進行的,而刪除則是在另一端進行的。佇列的基本操作是 enqueue 入隊 它是在表的末端 稱為隊尾 插入乙個元素 dequeue 出隊 它是刪除 並返回 表的開頭 叫作隊頭 的元素。對於每乙個佇列資料結構,我們保留乙個陣列 theray...