数据结构-C语言 单链线性表实现归并 C=A∪B
2017-10-16 17:32
465 查看
算法 2- 12
这是单链线性表的合并问题,假设头指针为La和Lb的单链表分别为线性表LA和LB的存储结构,现要归并La和Lb得到单链表Lc,需设立3个指针pa,pb,pc,其中pa和pb分别指向La表和Lb表中当前待比较插入的结点,而pc指向Lc表中当前最后一个结点,若pa->data<=pb->data,则将pa所指结点链接到pc所指结点之后,否则将pb所指结点链接到pc所指结点之后。当其中一个已知表全部插入Lc后,将另一表的剩余元素继续插入Lc。
这是单链线性表的合并问题,假设头指针为La和Lb的单链表分别为线性表LA和LB的存储结构,现要归并La和Lb得到单链表Lc,需设立3个指针pa,pb,pc,其中pa和pb分别指向La表和Lb表中当前待比较插入的结点,而pc指向Lc表中当前最后一个结点,若pa->data<=pb->data,则将pa所指结点链接到pc所指结点之后,否则将pb所指结点链接到pc所指结点之后。当其中一个已知表全部插入Lc后,将另一表的剩余元素继续插入Lc。
#include<stdio.h> #include<stdlib.h> #define OVERFLOW -1 #define OK 1 typedef int Status; typedef int ElemType; //定义单链表 typedef struct LNode { ElemType data; struct LNode *next; }LNode, *LinkList; //构造空的单链线性表 Status Init(LinkList *L) { *L=(LinkList)malloc(sizeof(struct LNode));//产生头结点,并使L指向此头结点 if (!*L) exit (OVERFLOW); (*L)->next=NULL;//指针域为空 return OK; } //正位序输入元素 void Create(LinkList *L, int n) { int i; LinkList p, q; q=*L; printf("请输入%d个按值非递减排列的元素:\n", n); for (i=1;i<=n;i++) { p=(LinkList)malloc(sizeof(struct LNode)); scanf("%d",&p->data); q->next=p; q=q->next; } p->next=NULL; } //输出元素 void print(LinkList *L) { LinkList p; p=(*L)->next; while (p) { printf("%d ",p->data); p=p->next; } printf("\n"); } //算法2-11 将两个有序链表归并为一个有序链表 void MergeList(LinkList *La, LinkList *Lb, LinkList *Lc) { //已知单链线性表La和Lb的元素按值非递减排列 //归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列 LinkList pa, pb ,pc; pa=(*La)->next; pb=(*Lb)->next; pc=*Lc=*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的头结点 } int main() { LinkList La, Lb, Lc; Init(&La); Init(&Lb); Init(&Lc); int n=5; Create(&La, n); printf("La = "); print(&La); Create(&Lb, n); printf("Lb = "); print(&Lb); MergeList(&La, &Lb, &Lc); printf("Lc= La ∪ Lb= "); print(&Lc); printf("\n*************Programmed by DXH924***************"); }
相关文章推荐
- 【数据结构】数据结构C语言的实现(线性表)
- 数据结构--线性表.顺序表(C语言实现)
- 数据结构-C语言 顺序表实现归并 C=A∪B
- 数据结构C语言之线性表简单实现
- (C语言)栈的线性结构实现(数据结构八)
- 数据结构_1:线性表: C语言实现
- (C语言)栈的线性结构实现(数据结构八)
- 数据结构-数组排序-二路归并-循环实现-C语言
- 数据结构学习笔记-线性表顺序存储(C语言实现)
- 数据结构-C语言 顺序表实现归并 C=A∪B II
- C语言数据结构之用线性顺序存储结构实现栈
- 数据结构 - 线性表(顺序表)C语言代码实现-处理整型数据(附详细解释)。 _清风明月
- 严蔚敏版《数据结构》第二章线性表的算法C语言实现
- 线性表数据结构C语言实现
- 数据结构-二路归并-递归实现-C语言
- 数据结构----纯C语言实现线性表的单向链式存储结构
- 数据结构 c语言实现哈希(hash)表查找 除留余数法构建hash函数开放定值法线性探测处理冲突
- c语言实现数据结构顺序表源代码
- 2.数据结构--线性表之链表实现
- 线性表的顺序表示和实现(数据结构)