資料結構 有序鍊錶合併(C語言版)

2021-08-21 04:38:39 字數 1354 閱讀 6328

有序鍊錶合併

兩個有序的鍊錶,要求將其合併為乙個鍊錶,並且該鍊錶保持有序!!

這裡所講的是鍊錶公升序

首先,我們要構造兩張按照公升序排列好的鍊錶。

構造鍊錶:我們的方法有尾插,頭插,大家可以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...