数据结构例程——合并有序表
2015-09-12 08:27
441 查看
本文针对数据结构基础系列网络课程(2):线性表中第15课时有序表。
问题:有两个有序表LA和LB,将它们合并成一个有序表LC。要求不破坏原有表LA和LB
算法思想:
![](http://img.blog.csdn.net/20150912081706304)
解法1:用顺序表实现(支持的算法库,及list.h文件,请点击链接…)
解法2:用单链表实现(支持的算法库,及linklist.h文件,请点击链接…)
问题:有两个有序表LA和LB,将它们合并成一个有序表LC。要求不破坏原有表LA和LB
算法思想:
解法1:用顺序表实现(支持的算法库,及list.h文件,请点击链接…)
#include "list.h" void UnionList(SqList *LA,SqList *LB,SqList *&LC) { int i=0,j=0,k=0; //i、j、k分别作为LA、LB、LC的下标 LC=(SqList *)malloc(sizeof(SqList)); LC->length=0; while (i<LA->length && j<LB->length) { if (LA->data[i]<LB->data[j]) { LC->data[k]=LA->data[i]; i++; k++; } else //LA->data[i]>LB->data[j] { LC->data[k]=LB->data[j]; j++; k++; } } while (i<LA->length) //LA尚未扫描完,将其余元素插入LC中 { LC->data[k]=LA->data[i]; i++; k++; } while (j<LB->length) //LB尚未扫描完,将其余元素插入LC中 { LC->data[k]=LB->data[j]; j++; k++; } LC->length=k; } int main() { SqList *L1,*L2,*L3; ElemType a[]= {1,3,5}; ElemType b[]= {2,4,8,10}; CreateList(L1,a,3); printf("L1:"); DispList(L1); CreateList(L2,b,4); printf("L2:"); DispList(L2); printf("归并\n"); UnionList(L1,L2,L3); printf("L3:"); DispList(L3); DestroyList(L1); DestroyList(L2); DestroyList(L3); }
解法2:用单链表实现(支持的算法库,及linklist.h文件,请点击链接…)
#include <stdio.h> #include <malloc.h> #include "linklist.h" void UnionList1(LinkList *LA,LinkList *LB,LinkList *&LC) { LinkList *pa=LA->next,*pb=LB->next,*pc,*s; LC=(LinkList *)malloc(sizeof(LinkList)); //创建LC的头结点 pc=LC; //pc始终指向LC的最后一个结点 while (pa!=NULL && pb!=NULL) { if (pa->data<pb->data) { s=(LinkList *)malloc(sizeof(LinkList));//复制*pa结点 s->data=pa->data; pc->next=s;pc=s; //采用尾插法将*s插入到LC的最后 pa=pa->next; } else { s=(LinkList *)malloc(sizeof(LinkList));//复制*pb结点 s->data=pb->data; pc->next=s;pc=s; //采用尾插法将*s插入到LC的最后 pb=pb->next; } } while (pa!=NULL) { s=(LinkList *)malloc(sizeof(LinkList)); //复制*pa结点 s->data=pa->data; pc->next=s;pc=s; //采用尾插法将*s插入到LC的最后 pa=pa->next; } while (pb!=NULL) { s=(LinkList *)malloc(sizeof(LinkList)); //复制*pa结点 s->data=pb->data; pc->next=s;pc=s; //采用尾插法将*s插入到LC的最后 pb=pb->next; } pc->next=NULL; } int main() { LinkList *L1,*L2,*L3; ElemType a[]={1,3,5}; ElemType b[]={2,4,8,10}; CreateListR(L1,a,3); printf("L1:");DispList(L1); CreateListR(L2,b,4); printf("L2:");DispList(L2); printf("归并\n"); UnionList1(L1,L2,L3); printf("L3:");DispList(L3); DestroyList(L1); DestroyList(L2); DestroyList(L3); return 0; }
相关文章推荐
- Python数据结构
- 数据结构之自建算法库——循环双链表
- 数据结构之自建算法库——循环单链表
- 算法与数据结构之顺序查找(C语言)
- 中国大学MOOC-陈越、何钦铭-数据结构-2015秋02-线性结构1题解
- 2014年腾讯,百度,微软,阿里巴巴(北京站)校园招聘笔试题(涉及C,C++,JAVA,数据结构)
- 【数据结构】之二叉树的java实现
- 数据结构例程——线性表的应用:表的自然连接
- 【数据结构】之队列的java实现(一)
- 数据结构之自建算法库——双链表
- 数据结构实践——单链表:逆置、连接与递增判断
- 数据结构之图
- 数据结构与算法(C#版)第二章 C#语言与面向对象技术(中)V1.0
- 数据结构例程——单链表应用举例
- 数据结构之栈
- 杨氏矩阵 Young Tableau
- opencv学习笔记(八)-IplImage数据结构
- 数据结构tip
- 数据结构之自建算法库——单链表
- 数据结构例程——单链表的建立