1、有乙個帶頭結點的單鏈表l=(a1,b1,a2,b2,a3,b3…an,bn),設計乙個演算法將其拆分為兩個帶頭結點的單鏈表l1和l2,其中l1=(a1,a2,a3,a4…an),l2=(bn,…b3,b2,b1),要求l1使用l的頭節點。
解:利用原單鏈表l中的所有結點通過改變指標域重組成兩個單鏈表l1和l2。由於l1中結點的相對順序與l中的相同,所以採用尾插法建立單鏈表l1;由於l2中結點的相對順序與l中的相反,所以採用頭插法建立單鏈表l2。**如下:
void
split
(linknode *
&l,linknode *
&l1,linknode *
&l2)
rl->next=
null
;}
2、設計乙個演算法,刪除乙個單鏈表l中元素值最大的結點(假設這樣的結點唯一)。
解:在單鏈表中刪除乙個結點先要找到它的前驅結點,用指標p掃瞄整個單鏈表,pre指向結點p的前驅結點,再掃瞄時用maxp指向data域值最大的結點,maxpre指向maxp所指結點的前驅結點。當單鏈表掃瞄完畢後,通過maxpre所指的結點刪除其後的結點,即刪除了結點值最大的結點。演算法如下:
void
delmaxnode
(linknode *
&l) pre=p;
p=p->next;
} maxpre->next=maxp->next;
free
(maxp)
;
單鏈表的應用
就地逆置 頭插法 有乙個線性表採用帶頭節點的單鏈表儲存,採用就地演算法將其就地逆置。思路 使用p指標掃瞄原單鏈表,現將頭節點的next置為空,然後將其他節點採用頭插法插入。就地逆置單鏈表,就地 的意思是輔助空間為o 1 public void reverse linklist l 將乙個線性表拆成兩...
單鏈表的應用
前言 上一節通過學習單鏈表,知道單鏈表的是隨機訪問結構,要獲取元素的元素必須從頭指標出發順序查詢,因此也稱為順序訪問的訪問結構,使用單鏈表可以克服陣列鍊錶需要預先知道資料大小的缺點,實現靈活的動態記憶體管理。這裡我們用c語言結合單鏈表來實現乙個可以實現增刪改查的學生管理系統。include incl...
單鏈表的簡單例項
1 輸入函式功能 編號按從小到大自動排列。分兩種情況 表尾插入和表插入。2 顯示函式功能 按格式輸出該表中所有資訊 3 查詢函式功能 按名字和型別查詢,匹配後按格式輸出這組資料。若沒有找到,則輸出沒有這個元素。4 刪除函式功能 按名字和編號刪除,匹配後刪除該整組資料。分為兩種情況 刪除表中元素和表尾...