迴圈鍊錶中,如果我們要找最後乙個元素,時間複雜度為o(n),因為我們需要從第乙個開始乙個接乙個的找。
那怎樣再次簡化,將時間複雜度降低呢
我們可以設定乙個尾指標(作用類似於頭指標)指向尾結點,尾結點的指標指向第乙個結點,第乙個結點的指標指向第二個結點
判斷單鏈表是否有環的兩種方法:①:指標p和q,p一直向前走,q每次都從頭開始走,當他們到同一結點但是所用步數不相等,則有環。
②:用快慢指標,p和q,如果快指標p最終追上了慢指標q,則單鏈表為迴圈鍊錶。
#include
#define ok 1
#define error 0
#define true 1
#define false 0
typedef
int status;
typedef
int elemtype;
typedef
struct node
node,
*linklist;
//linklist l定義了乙個結構指標l,指向單鏈表的頭結點,所以l->next就是頭結點的指標
//初始化帶頭結點的空鍊錶。
status linklist
(linklist *l)
//返回鍊錶元素個數
intlistlength
(linklist l)
return i;
}//頭插法建立鍊錶,並且隨機產生n個元素的值
status createlisthead
(linklist *l,
int n)
return ok;
}void createlisttail (linklist *l int n)
inthasloop1
(linklist l)
} cur2 = cur1-
>next;
pos2++;}
return0;
}int
hasloop2
(linklist l)
return0;
}
實驗2迴圈鍊錶
目的 通過實際操作迴圈鍊錶,掌握迴圈鍊錶的鏈式儲存結構以及驗證單鏈表及其操作的實現並進一步理解演算法與程式的關係。內容 用尾插法建立帶頭結點的單鏈表並對已建立的迴圈鍊錶實現插入 刪除 查詢等基本操作。include using namespace std template struct node t...
迴圈鍊錶,雙向鍊錶
迴圈鍊錶 迴圈鍊錶與順序鍊錶之間的區別 迴圈鍊錶最後乙個資料的next指標域不為空,而是指向頭結點,其他基本操作大體相同,只是在判斷表結束的條件變為判斷節點的引用域是否為頭引用 雙向鍊錶 author neosong date oct 10,2017 4 43 01 pm program of in...
鍊錶之迴圈鍊錶
單向鍊錶 鍊錶之單向鍊錶 迴圈鍊錶是單向鍊錶的變化形式。單向鍊錶的尾部的指標域是空的,而迴圈鍊錶的尾部指標是指向鍊錶的頭結點的,其結構如圖一所示。圖 一循 環鏈表結 構圖一 迴圈鍊錶結構 圖一迴圈鍊錶 結構從上面結構可以看出,迴圈鍊錶的節點形成了乙個圈。在進行遍歷時,可以從任意節點開始。如果記錄了尾...