線性表——鏈式儲存結構合併操作
阿新 • • 發佈:2019-01-23
採取的結構和上一篇博文一致,均為單鏈表儲存結構。
#include<iostream> #include<stdio.h> #include<stdlib.h> #define ElemType int #define Status int #define ERROR 0 #define OK 1 using namespace std; typedef struct LNode { ElemType data; struct LNode *next; }LNode, *LinkedList; void MergeList_L(LinkedList &La, LinkedList &Lb, LinkedList &Lc) { LNode *pa = La->next; LNode *pb = Lb->next; LNode *pc; Lc =pc=La; while (pa&&pb) { if (pa->data <= pb->data) { pc->next = pa; pc = pa; pa = pa->next; } else { pc->next = pb; pc = pb; pb = pb->next; } } while (pa) { pc->next = pa; pc = pa; pa = pa->next; } while (pb) { pc->next = pb; pc = pb; pb = pb->next; } free(pb); free(pa); } //正序建立線性表,演算法2.11 void CreateList_L(LinkedList &L, int n) { L = (LinkedList)malloc(sizeof(LNode)); L->next = NULL; for (int i = 0; i <n; ++i) { LNode *q = (LinkedList)malloc(sizeof(LNode)); cin >> q->data; q->next = L->next; L->next = q; } } void swap(ElemType &a, ElemType &b) { ElemType c = a; a = b; b = c; } //排序 void ListSort(LinkedList &L) { if (L == NULL || L->next == NULL) return; LNode *pstart = new LNode(); pstart->next = L; LNode *sortedTail = pstart; while (sortedTail->next != NULL) { LNode *minNode = sortedTail->next; LNode *p = sortedTail->next->next; while (p != NULL) { if (p->data < minNode->data) minNode = p; p = p->next; } swap(minNode->data, sortedTail->next->data); sortedTail = sortedTail->next; } L = pstart->next; delete pstart; } //輸出線性連結串列 void PrintList_L(LinkedList &L) { LNode *p = L->next; while (p) { cout << p->data << " "; p = p->next; } cout << endl; } void main() { int na, nb; LinkedList La, Lb, Lc; cout << "La的元素個數:"; cin >> na; cout << "La線性連結串列元素:" << endl; CreateList_L(La, na); ListSort(La); PrintList_L(La); cout << "Lb的元素個數:"; cin >> nb; cout << "Lb線性連結串列元素:" << endl; CreateList_L(Lb, nb); ListSort(Lb); PrintList_L(Lb); MergeList_L(La, Lb, Lc); cout << endl; cout << "La,Lb連結成Lc,Lc連結串列:" << endl; PrintList_L(Lc); system("pause"); }