日常生活中我們吃飯,買票等都是要排隊的,這裡的排隊其實就是對應著資料結構中的佇列了。其中排隊過程中不允許插隊也是乙個能反應佇列結構性質的表現吧。佇列和棧一樣,是乙個被限制訪問的線性結構。普通佇列規定只能在隊頭出,只能在隊尾進,這也是為什麼不允許插隊的原因了。當然這裡討論的是最簡單的最普通的佇列了,當然還是有一些特殊的佇列的,比如雙端佇列,優先順序佇列等,後續細說。
基於鏈式儲存的佇列結構中,結點型別和之前的單鏈表是類似的,簡直是一樣的。
#pragma once
#includeusing namespace std;
templateclass linknode
;templatelinknode::linknode()//初始化 用於構建乙個頭結點時使用
templatelinknode::linknode(t &da)
templatelinknode::~linknode()
鏈式佇列和單鏈錶比起來是多了乙個隊尾指標,用來指向最後乙個結點,隊頭指標仍然指向當前佇列的第乙個結點。進佇列的時候要考慮乙個問題,那就是這個佇列是不是為空的。如果是空佇列的話,那需要將隊頭指標(front)和隊尾指標(rear)同時指向新的結點(同時也是第乙個結點)。如果佇列不為空的話,那就直接將新結點被rear所指即可。所以這裡在進佇列操作的時候要多一步考慮了。可是我們可以像單鏈表一樣,增加乙個頭結點,這個頭結點什麼也不做,只是開闢出來乙個結點空間讓對頭和隊尾都指向即可。這時候再進佇列的時候就不用考慮佇列是否為空了,直接鏈結在rear的後面ok。
下面是主函式的測試:#pragma once
#include"linknode.h"
#includeusing namespace std;
templateclass queue
;templatequeue::queue()
templatequeue::queue(queue&q)
//剩下尾指標的沒有複製
elem = q_rear->data;//q的隊尾指標
newnode = new linknode(elem);
rear->next = newnode;
rear = newnode;
}templatequeue::~queue()
templatevoid queue::clearqueue()
//如果不為空但跳過迴圈則為佇列中乙個元素
delete del;//刪除尾指標
rear = front;//置為空佇列
}templatet queue::de_queue()//出佇列 刪除隊首結點
templatevoid queue::in_queue(t &elem)//入佇列,後面修改尾指標即可 不需做判斷
templatelinknode* queue::gethead()
templatelinknode* queue::getrear()
templateint queue::length()
return count;
}templatevoid queue::output()
//輸出隊尾
cout<<"#"//剩下尾指標的沒有複製
elem = q_rear->data;//q的隊尾指標
newnode = new linknode(elem);
rear->next = newnode;
rear = newnode;
}
#include"queue.h"
#includeusing namespace std;
void main()
{ queuequ;
for(int i=0;i<5;i++)
qu.in_queue(i);
qu.output();
coutfor(int i=0;i<3;i++)
qu1.in_queue(i);
qu1.output();
cout<
資料結構 基於鏈式儲存的佇列
這是乙個基於帶頭結點單鏈表下實現的的鏈佇列,但是寫完我覺得 中存在如下問題 感覺不夠完美 首先看定義 define elemtype int typedef struct linknode linknode typedef struct linkqueue 初始時隊首指標和隊尾指標都指向頭結點 帶頭...
佇列鏈式儲存
ifndef status h define status h define false 1 define true 1 define ok 1 define error 0 typedef int elemtype typedef int status endif ifndef stack h d...
佇列的鏈式儲存
include include include typedef int elemtype typedef struct qnodequeuenode,queuenodeptr typedef struct qlistlistqueue,listqueueptr listqueueptr initqu...