有序鍊錶合併
兩個有序的鍊錶,要求將其合併為乙個鍊錶,並且該鍊錶保持有序!!
這裡所講的是鍊錶公升序!
首先,我們要構造兩張按照公升序排列好的鍊錶。
構造鍊錶:我們的方法有尾插,頭插,大家可以click鏈結來檢視:
這裡我們的實驗資料,以及思路如圖所示!!
實驗資料:
鍊錶1:1, 3, 5, 7
鍊錶2:1, 2, 4 ,5
關於合併的部分**!
// 合併兩個有序單鏈表,合併後依然有序 (公升序)
pnode mergeslist(pnode phead1, pnode phead2)
pnode pnewhead = null;
pnode pcur1 = phead1;
pnode pcur2 = phead2;
pnode pcur = null;
if (pcur1->_data > pcur2->_data) //選擇頭結點
else
pcur = pnewhead;
while (pcur1 && pcur2) //當pcur1 以及 pcur2 均不為空時 進入迴圈
else
}if (pcur1 == null) //出迴圈之後,將非空的鍊錶直接接到pcur的後面
pcur->_pnext = pcur2;
else
pcur->_pnext = pcur1;
return pnewhead;
}
該**中有許多可以優化的地方!
譬如,可以將選擇頭結點或者迴圈鏈結的操作進行乙個有效的封裝
大家可以試一試!!
另外,可以採用分離鍊錶元素的方式,用陣列進行排序,再進行鍊錶與陣列之間的轉化,最終達到合併鍊錶的功能!
之前用陣列做過一次,可以參考一下:
關於資料結構的其他知識大家可以訪問我的主頁!
沒有敲不壞的鍵盤!!!!只要你敢敲!!!
謝謝!
資料結構 鍊錶(C語言版)
程式 include include include define error 0 define ok 1 define true 1 define false 0 define overflow 2 typedef int elemtype 定義鍊錶元素的型別 typedef int status...
王道資料結構鍊錶C語言版
include stdio.h include stdlib.h include stdbool.h typedef struct lnode lnode,linkedlist 初始化乙個單鏈表 帶頭結點 linkedlist initlist linkedlist l l next null 頭結...
資料結構鍊錶C語言版 單向鍊錶詳解
最近在準備計算機考研,正在複習資料結構的知識點,剛開始學習鍊錶的時候實在是有些痛苦,在痛苦了幾個小時後,終於有所收穫,在此記錄一下 相鄰元素之間通過指標連線。最後乙個元素的後繼指標為null。鍊錶的空間能夠按需分配。沒有記憶體空間的浪費。typedef struct node node 定義乙個st...