遍歷單鏈表中的每個一資料元素
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。頭結點與頭指標的異同 頭結點放在第一元素的結點之前...