資料結構——有序連結串列合併(C語言版)
阿新 • • 發佈:2018-12-31
有序連結串列合併
兩個有序的連結串列,要求將其合併為一個連結串列,並且該連結串列保持有序!!
這裡所講的是連結串列升序!
這裡我們的實驗資料,以及思路如圖所示!!
實驗資料:
連結串列1:1, 3, 5, 7
連結串列2:1, 2, 4 ,5
關於合併的部分程式碼!
// 合併兩個有序單鏈表,合併後依然有序 (升序) PNode MergeSList(PNode pHead1, PNode pHead2) { if (pHead1 == NULL && pHead2 == NULL) { return NULL; } PNode pNewHead = NULL; PNode pCur1 = pHead1; PNode pCur2 = pHead2; PNode pCur = NULL; if (pCur1->_data > pCur2->_data) //選擇頭結點 { pNewHead = pCur2; pCur2 = pCur2->_pNext; } else { pNewHead = pCur1; pCur1 = pCur1->_pNext; } pCur = pNewHead; while (pCur1 && pCur2) //當pCur1 以及 pCur2 均不為空時 進入迴圈 { if (pCur1->_data < pCur2->_data) //迴圈中選擇data較小的結點連結到pcur的後面 { pCur->_pNext = pCur1; pCur1 = pCur1->_pNext; pCur = pCur->_pNext; } else { pCur->_pNext = pCur2; pCur2 = pCur2->_pNext; pCur = pCur->_pNext; } } if (pCur1 == NULL) //出迴圈之後,將非空的連結串列直接接到pcur的後面 pCur->_pNext = pCur2; else pCur->_pNext = pCur1; return pNewHead; }
該程式碼中有許多可以優化的地方!
譬如,可以將選擇頭結點或者迴圈連結的操作進行一個有效的封裝
大家可以試一試!!
關於資料結構的其他知識大家可以訪問我的主頁!
沒有敲不壞的鍵盤!!!!只要你敢敲!!!
謝謝!