1,staticqueue 的物件在建立的時候,對於資料元素為類型別時,會多次呼叫元素型別的建構函式,影響效率,所以要實現鏈式佇列;
2,佇列的鏈式儲存實現:
3,鏈式佇列的設計要點:
1,類模板,抽象父類 queue 的直接子類;
2,在內部使用鏈式結構實現元素的儲存;
3,只在鍊錶的頭部和尾部進行操作;
4,基於 linklist 的佇列 linkqueue 的實現:
1 #include "5,基於 linklist 實現鏈式佇列:queue.h
"2 #include "
exception.h
"3 #include "
linklist.h"4
5namespace
dtlib618
19void add(const t& e) //
o(n) 這裡需要改進 每次插入都要從頭到尾的插入,
很耗時。用linuxlist改進。
2023
24void remove() //
o(1)
2530
else
3134}35
36 t front() const
//o(1)
3742
else
4346}47
48int length() const
//o(1)
4952
53void clear() //
o(n)
5457
58 ~linkqueue()
5962
};63
64 }
1,基於 linklist 實現的鏈式佇列插入和清空操作中時間複雜度為 o(n),不高效;
6,佇列鏈式儲存實現的優化:
1,基於雙向迴圈鍊錶實現,要基於頭結點的前驅和後繼指標,很經典,直接指向隊頭和隊尾;
7,基於 linux 核心鍊錶實現鏈式佇列:
1,核心鍊錶本身就是雙向鍊錶且能夠通過結點指標相互連線,僅需要給結點指標加入值的儲存空間構成新的結點就可以來作為真真的節點,但是頭結點不用加值的儲存空間;
2,形象的來說就是除了頭結點其它結點長出來了一部分;
8,基於 linux 核心鍊錶的佇列 linkqueue 實現:
19,linkqueue 的測試**:#ifndef linkqueue_h
2#define linkqueue_h
34 #include "
queue.h
"5 #include "
exception.h
"6 #include "
linuxlist.h"7
8namespace
dtlib9;
2021
list_head m_header;
22int
m_length;
2324
public
:25 linkqueue() //
o(1)
2630
31void add(const t& e) //
o(1)
3241
else
4245}46
47void remove() //
o(1)
4857
else
5861}62
63 t front() const
//o(1)
6469
else
7073}74
75int length() const
//o(1)
7679
80void clear() //
o(n)
8186}87
88 ~linkqueue() //
o(n)
8992
};9394}
9596
#endif
//linkqueue_h
1 #include 2 #include "10,小結:linkqueue.h
"3 #include "
staticqueue.h"4
5using
namespace
std;
6using
namespace
dtlib;78
class test : public
object915
16 ~test()
1720
};21
22int
main()
2331
32while( lq.length() >0)33
3738
return0;
39 }
1,staticqueue 在初始化時可能多次呼叫元素型別的建構函式;
2,linklist 的組合使用能夠實現佇列的功能,但是不夠高效;
3,linkqueue 的最終實現組合使用了 linux 核心鍊錶;
4,linkqueue 中入隊和出隊操作可以再常量時間內完成;
資料結構 佇列的鏈式實現
1 佇列的鏈式儲存表示 佇列的鏈式儲存結構簡稱為鏈佇列,它是限制在表頭進行刪除操作和表尾進行插入操作的單鏈表。需要兩類不同的結點 資料元素結點,佇列的隊首指標和隊尾指標的結點 指標結點型別定義 typedef struct link queue linkqueue 2 鏈隊運算及指標變化 鏈隊的操作...
資料結構 佇列的實現 鏈式
如下 include include typedef struct qnode qnode,queueptr typedef struct linkqueue void initqueue linkqueue q 初始化佇列,構造乙個空佇列q intenqueue linkqueue q,int e...
資料結構鏈式佇列
對佇列進行以下操作 1.入佇列 2.出佇列 3.取隊首元素 佇列先進先出,要想實現入佇列,從隊尾插入元素 要想實現出佇列,從隊首刪除元素。在這裡,我們定義頭尾指標,首先對空佇列插入元素,讓頭指標等於尾指標,如果非空,依然讓頭指標指向隊首,尾指標指向要插入的元素。刪除元素時,直接讓頭指標指向下乙個元素...