使用不帶頭結點的迴圈鍊錶實現佇列(資料結構)

2021-07-04 19:48:03 字數 1614 閱讀 8213

我使用類模版來完成迴圈鍊錶實現佇列的操作。首先定義乙個結點類node用來儲存結點資訊,然後定義佇列類queue,接下來我們思考:要完成佇列的4個基本操作即

1.判斷佇列是否為空

2.在佇列尾部push進資料

3.從佇列頭部取出資料

4.刪除掉佇列首部的元素

我們這個queue類需要什麼成員變數?

答案是: (維護)佇列尾部結點、佇列大小就夠了。

我們來分析,尾部push資料的時候,我們只需要在myback和myback->next之間插入這個結點,然後把這個myback指向這個結點即可。取出和刪除頭部資料只需要對myback->next進行操作即可,複雜度是o(1),效率很高。

剩下的一些實現細節看我下面的**實現:

//circle_list.h

#ifndef circle_list

#define circle_list

#include#include#includetemplate class node//節點類

};template class queue

bool empty();

void enqueue(t value);//後面壓入

t front();

void display();

void dequeue();//前面刪除

~queue();

queue(const queue&temp);

queueoperator=(const queuetemp);

};template bool queue::empty()

template queue::queue(const queue&temp)

enqueue(temp.myback->data);

}template queuequeue::operator=(const queuetemp)

enqueue(temp.myback->data);

return *this;

}template void queue::enqueue(t value)

else

size++;

}template t queue::front()

template void queue::display()

else

cout << myback->data;

cout << endl; }}

template void queue::dequeue()

template queue::~queue()

else

delete myback; }}

#endif

進行測試:

#include"circle_list.h"

using namespace std;

int main()

實驗結果截圖;

不帶頭結點的雙向迴圈鍊錶

基本概念 迴圈鍊錶 將單鏈表中最後乙個結點的next指向頭結點或者空指標,就使得整個單鏈表形成乙個環,這種頭尾相接的單鏈表稱為單迴圈鍊錶,簡稱迴圈鍊錶。雙向鍊錶 是在單鏈表的每個結點中,再設定乙個指向其前驅結點的指標域prior,在雙向鍊錶的結點中有兩個指標域,乙個next指向直接後繼,乙個prio...

不帶頭結點的單迴圈鍊錶

建立標頭檔案nlist.h pragma once 不帶頭節點的鍊錶,主要應用在迴圈鍊錶中,其缺點,操作複雜 會出現二級指標 優點 靈活 頭指標指向哪個節點哪個節點就是第乙個節點 不帶頭節點的單鏈迴圈鍊錶,尾節點的next指向第乙個節點 typedef struct nnode nnode,pnli...

單向不帶頭結點不帶環的鍊錶實現

鍊錶有很多種類,單向,雙向,不帶頭,帶頭,不帶環,帶環,結合起來一共可以有八種鍊錶形式 今天我們來實現一種名字叫 單向不帶頭不帶環的鍊錶 下面就是每一部分的 實現 首先我們要做的就是函式的宣告,結構體的定義,標頭檔案的引用 pragma once define header printf n s n...