有序表的合并
#include <iostream>
using namespace std;
#define MAXSIZE 100
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef struct {
int *elem;
int length;
}SqList;
// 初始化
Status InitList_Sq(SqList &L) {
L.elem = new int[MAXSIZE];
if (!L.elem)
exit(OVERFLOW);
L.length = 0;
return OK;
}
// 遍历
void TraveList(SqList L)
{
for (int i = 0; i < L.length; i++)
cout << L.elem[i] << " ";
cout << endl;
}
void CreateList(SqList &L, int n)
{
for (int i = 0; i < n; i++){
cin >> L.elem[i];
L.length++;
}
}
void MergeList(SqList La, SqList Lb, SqList &Lc) {
int *pa = La.elem;
int *pb = Lb.elem;
Lc.length = La.length + Lb.length;
Lc.elem = new int[Lc.length];
int *pc = Lc.elem;
int *pa_last = La.elem + La.length - 1;
int *pb_last = Lb.elem + Lb.length - 1;
while (pa <= pa_last && pb_last){
if (*pa <= *pb)
*pc++ = *pa++;
else
*pc++ = *pb++;
}
while (pa <= pa_last)
*pc++ = *pa++;
while (pb <= pb_last)
*pc++ = *pb++;
}
int main() {
SqList La, Lb, Lc;
InitList_Sq(La);
InitList_Sq(Lb);
InitList_Sq(Lc);
CreateList(La, 3);
CreateList(Lb, 6);
MergeList(La, Lb, Lc);
TraveList(Lc);
return 0;
}
#include <iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
// 定义单链表
typedef struct LNode {
int data;
struct LNode *next;
}LNode, *LinkList;
// 初始化链表
Status InitList_L(LinkList &L) {
L = new LNode;
L->next = NULL;
return OK;
}
// 尾插法建立单链表
void CreateList_R(LinkList &L, int n) {
L = new LNode;
L->next = NULL;
LNode *r = L;
for (int i = 0; i < n; ++i) {
LNode *p = new LNode;
cin >> p->data;
p->next = NULL;
r->next = p;
r = p;
}
}
// 遍历链表
void TraveList(LinkList L){
LinkList p;
p = L->next;
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
// 线性表的合并
void MergeList_L(LinkList &La, LinkList &Lb, LinkList &Lc) {
LNode *pa = La->next;
LNode *pb = Lb->next;
LNode *pc = Lc = 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;
}
pc->next = pa ? pa : pb;
delete Lb;
Lb = NULL;
}
}
int main() {
LinkList La;
LinkList Lb;
LinkList Lc;
InitList_L(La);
InitList_L(Lb);
InitList_L(Lc);
CreateList_R(La, 3);
CreateList_R(Lb, 6);
MergeList_L(La, Lb, Lc);
TraveList(Lc);
return 0;
}