基於鏈式儲存的佇列

2021-06-12 10:19:59 字數 2010 閱讀 3054

日常生活中我們吃飯,買票等都是要排隊的,這裡的排隊其實就是對應著資料結構中的佇列了。其中排隊過程中不允許插隊也是乙個能反應佇列結構性質的表現吧。佇列和棧一樣,是乙個被限制訪問的線性結構。普通佇列規定只能在隊頭出,只能在隊尾進,這也是為什麼不允許插隊的原因了。當然這裡討論的是最簡單的最普通的佇列了,當然還是有一些特殊的佇列的,比如雙端佇列,優先順序佇列等,後續細說。

基於鏈式儲存的佇列結構中,結點型別和之前的單鏈表是類似的,簡直是一樣的。

#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...