資料結構來具體實現。
佇列(queue) 也是表,然而,使用佇列時插入在一端進行而在另一端進行刪除操作。
對與佇列而言,不論是使用佇列或者使用鍊錶都是快速的o(1)時間完成操作。
先進先出
佇列可以使用陣列與鍊錶實現
陣列實現:
其實陣列實現就是我們常說的迴圈佇列,迴圈佇列的應用很多,比如作為緩衝區使用,核心就
是使用佇列原理實現的核心緩衝區。
然而更重要的就是判斷空佇列,判斷滿佇列的方法了,根據設定不同方法也不盡相同, 我們這
裡使用的是少用一塊空間的方法,判斷佇列空或者滿。當然我們這裡也是不保證執行緒安全的,
如果你需要保證執行緒安全,簡單的就加一把鎖,多處理器加自旋鎖。也可以考慮無鎖技術。
[c]#define max 10
#define success 0
#define fail -1
/*這是乙個迴圈佇列,使用少用乙個空間的辦法解決判滿判空的問題*/
typedef struct queuequeue;
[/c]
[c]queue * queue_create(void)elseelseelse_node;
typedef struct _node_ctl;
[/c]
[c]void que_inq(_ctl *ctl,_node *node)else{
ctl->tail->next = node ;
ctl->tail = node ;
node->next = null;
ctl->count++;
[/c]
[c]_node * que_deq(_ctl * ctl){
_node *rst = null;
if(null == ctl){
return null;
rst = ctl->head;
if(rst){
ctl->head = rst->next;
ctl->count--;
rst->next = null;
return rst;
[/c]
[c]void que_del(_ctl *ctl){
_node *pos = null;
if(null == ctl){
return ;
pos = ctl->head;
while(pos != null){
ctl->head = pos->next;
free(pos);
pos = ctl->head;
[/c]
[c]void que_create(_ctl *ctl ,int len){
_node *pnt = null ;
int fact = 0 ;
if(null == ctl || len < 1){
return ;
while(fact < len){
pnt = (_node *)malloc(sizeof(_node));
pnt->data = fact + 1;
que_inq(ctl,pnt);
fact++;
[/c]
資料結構 棧和佇列小結
1棧 1 棧的定義 棧是限定僅在表尾進行插入和刪除操作的線性表。我們把插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不包含任何元素的棧稱為空棧。棧又稱為後進先出 last in first out 的線性表,簡稱lifo結構。2 棧的儲存結構 由於棧也是線性表,因此線性表的儲存結構...
大話資料結構 (三)棧與佇列
棧的定義 棧是限定僅在表尾進行插入和刪除操作的線性表,是線性表內的乙個小分支。我們把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 buttom 不含任何資料元素的棧稱為空棧。棧又稱為後進先出的線性表,簡稱lifo結構。在日常生活中,棧的魅力無處不在,比如ctrl z回退快捷鍵,它會馬上返回到...
資料結構 棧與佇列
題目 1.編寫函式,採用鏈式儲存實現棧的初始化 入棧 出棧操作 2.編寫函式,採用順序儲存實現棧的初始化 入棧 出棧操作 3.編寫函式,採用鏈式儲存實現佇列的初始化 入隊 出隊操作 4.編寫函式,採用順序儲存實現佇列的初始化 入隊 出隊操作 5.編寫乙個主函式,在主函式中設計乙個簡單的選單,分別除錯...