十 單鏈表的遍歷與優化

2022-08-11 14:09:20 字數 1040 閱讀 9200

遍歷單鏈表中的每個一資料元素

linklistlist;

for(int i = 0; i < 5; i++) // o(n)

// 這裡的遍歷方法效率很低

for(int i = 0; i < list.length(); i++) // o(n^2)

遍歷鍊錶的時間複雜度不是線性的,插入元素是線性,遍歷就不是了。

不能以線性的時間複雜度完成單鏈表的遍歷

設計思路(游標)

提供一組遍歷相關的函式,以線性的時間複雜度遍歷鍊錶

遍歷函式原型設計

bool move(int i, int step = 1);

bool end();

t current();

bool next(); // 移動次數根據step的值來確定

// i 目標位置,step 游標每次移動結點的數目

bool move(int i, int step = 1)

return ret;

}bool end()

t current()

else

}bool next()

// i的值和m_step的值是一樣的,就表示移動成功

return (i == m_step);

}// 新的遍歷使用方法

for(list.move(0); !list.end(); list.next()) // o(n)

virtual node* creat()

virtual void destory(node* pn)

在單鏈表內部定義游標變數,通過游標變數提高效率

遍歷相關的成員函式是相互依賴,相互配合的關係

封裝結點的申請和刪除操作更有利於增強擴充套件性

12 單鏈表的遍歷與優化

提供一組遍歷相關的函式,以線性的時間複雜度遍歷鍊錶 函式功能說明 move 將游標定位到目標位置 next 移動游標 current 獲取游標所指向的資料元素 end 游標是否到達尾部 bool move int i,int step 1 bool end t current bool next i...

單鏈表的建立,遍歷

結構體和主函式 include using namespace std typedef struct node node,list 定義乙個結構體 儲存鍊錶 intmain return0 單鏈表的建立 尾插法 void creatlist list l,int n 尾插法建立單鏈表 單鏈表的遍歷 ...

單鏈表的遍歷 插入 刪除

單鏈表由乙個個的節點組成,節點由兩個部分組成 資料域和指標域。資料域就是儲存這個節點的資料,這沒什麼說的。指標域存放的指標指向的是下乙個結點,正是因為指標域的存在,把存在記憶體不連續區域裡的各個結點連線了起來。單鏈表最後乙個結點的指標域為空null。頭結點與頭指標的異同 頭結點放在第一元素的結點之前...