我使用類模版來完成迴圈鍊錶實現佇列的操作。首先定義乙個結點類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...