采取的结构和上一篇博文一致,均为单链表存储结构。
#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");
}