📄 mergelist.cpp
字号:
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
//#include "stdafx.h"
#define ElemType int
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreateList_L(LinkList &L,int n) { // 算法2.11
// 逆位序输入n个元素的值,建立带表头结点的单链线性表L
LinkList p;
int i,kk;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL; // 先建立一个带头结点的单链表
for (i=n; i>0; --i) {
p = (LinkList)malloc(sizeof(LNode)); // 生成新结点
cin>>kk;
p->data=kk;
p->next = L->next; L->next = p; // 插入到表头
}
} // CreateList_L
void MergeList_L1(LinkList &La, LinkList &Lb, LinkList &Lc) {
// 算法2.12
// 已知单链线性表La和Lb的元素按值非递减排列。
// 归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列。
LinkList pa, pb, pc;
pa = La->next; pb = Lb->next;
Lc = pc = La; // 用La的头结点作为Lc的头结点
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; // 插入剩余段
free(Lb); // 释放Lb的头结点
} // MergeList_L
void PrintList(LinkList &L)
{
LinkList Ls;
Ls=L->next;//跳过头结点
printf("\n");
while(Ls!=NULL)
{ printf("%d ",Ls->data);
Ls=Ls->next;
}
printf("\n");
}
main()
{ LinkList L1,L2,L3;
CreateList_L(L1,4);
printf("L1中的数据是:");
PrintList(L1);
CreateList_L(L2,7);
printf("L2中的数据是:");
PrintList(L2);
MergeList_L1(L1,L2,L3);
printf("合并后的L3中的数据是(重复的保留):");
PrintList(L3);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -