佇列是一種特殊的線性表,資料元素之間是線性關係,其插入和刪除操作分別在兩邊進行,一端只能插入,另一端只能刪除。
隊首(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...