C++資料結構與演算法: 單向鏈結串列(上)
在上一篇主要解釋如何使用指標,而這篇將建立含有字串資料型態的單向鏈結串列,如圖一所示.換句話說,這次範例將實作類似Qt的QStringList,在官方文件指出QStringList繼承QList<T>,然而我使用類似QLinkedList<T>實作字串串列(a list of strings),因此實作範例將與QStringList有所不同.
下表描述QList<T>和QLinkedList<T>的差別性,基本上新增項目時(item),QLinkList是最快速的,但存取資料比較不方便.
我們先定義新的資料類型結構strNode,結構成員data為Qt的QString,而next為指向結構strNode的指標變數.typedef主要給資料型態定義新的名稱,而這裡不但將struct strNode命名為nodeptr,而且nodeptr為指向結構strNode的指標變數.
例如,我們直接使用nodeptr宣告指向結構strNode的指標變數head.
作者有話要說:
下一篇將利用類別來實作如何在串列後面加入(append)項目.
圖一.字串型態的連結串列 |
QList<T>
|
QLinkedList<T>
|
|
特性
|
基於索引值存取(index-based access)所要的資料
|
基於迭代器存取(iterator -based access)所要的資料
|
利用索引值直接存取任一項目(item)
|
存取任一項目(item)時,可能需要走訪所有項目
|
|
具有陣列(Array)的特性,
因此插入或刪除資料,需要搬動其他項目
|
可快速在特定位置插入資料
|
|
存取
|
易存取資料
|
不易存取資料
|
時間複雜度
|
||
插入
|
O(n)
|
O(1)
|
Prepending
|
Amort. O(1)
|
O(1)
|
Appending
|
Amort. O(1)
|
O(1)
|
我們先定義新的資料類型結構strNode,結構成員data為Qt的QString,而next為指向結構strNode的指標變數.typedef主要給資料型態定義新的名稱,而這裡不但將struct strNode命名為nodeptr,而且nodeptr為指向結構strNode的指標變數.
typedef struct strNode
{
QString data;
strNode *next;
}*nodeptr;
例如,我們直接使用nodeptr宣告指向結構strNode的指標變數head.
nodeptr head;
作者有話要說:
下一篇將利用類別來實作如何在串列後面加入(append)項目.
留言
張貼留言