数据结构之两个有序表的合并
2017-09-30 20:32
761 查看
问题:将两个有序顺序表合并成一个有序顺序表。
算法思想:不断取两个顺序表表头,比较大小,将小者存入新的有序顺序表,直至其中一个表比较完毕,将另一个剩余的表全部存入新的顺序表。
运行结果:
算法思想:不断取两个顺序表表头,比较大小,将小者存入新的有序顺序表,直至其中一个表比较完毕,将另一个剩余的表全部存入新的顺序表。
#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define Maxsize 50 int flag=1; //利用变量构造两个不同的有序表 typedef struct SqList{ int* data; int length; }; // ---------------------------- 初始化----------------------------- bool InitList(struct SqList* L,int length) { L->data=(int*)malloc(sizeof(int)*(length)); int i=0; for(i=0;i<length;i++) { L->data[i]=i*flag+1; } flag=2; L->length=length; return true; } void Delete_same(struct SqList* LL) { int i=0; int j=1; for(i=0,j=1;j<LL->length;j++) { if(LL->data[j]!=LL->data[i]) { i++; LL->data[i]=LL->data[j]; } } LL->length=i+1; } //------------------合并算法-------------------- bool merge(struct SqList* LL1,struct SqList* LL2,struct SqList* LL3) { if((LL1->length+LL2->length)>LL3->length) return false; int i=0; int j=0; int k=0; while((i<LL1->length)&&(j<LL2->length)) { if(LL1->data[i]<=LL2->data[j]) { LL3->data[k]=LL1->data[i]; i++; k++; } else { LL3->data[k]=LL2->data[j]; j++; k++; } } while(i<LL1->length) { LL3->data[k++]=LL1->data[i++]; } while(j<LL2->length) { LL3->data[k++]=LL2->data[j++]; } LL3->length=k; return true; } void print(struct SqList *L) { int j=L->length; int i=0; for(i=0;i<j;i++) { printf("%d ",L->data[i]); } printf("\n"); } int main() { //-------------------初始化顺序表-------------------- struct SqList L1; struct SqList L2; struct SqList L3; if(InitList(&L1,10)==true) { printf("顺序表L1初始化成功!\n"); } print(&L1); printf("\n\n"); if(InitList(&L2,10)==true) { printf("顺序表L2初始化成功!\n"); } print(&L2); printf("\n\n"); if(InitList(&L3,20)==true) { printf("顺序表L3初始化成功!\n"); } //print(&L3); printf("\n\n"); if(merge(&L1,&L2,&L3)==true) printf("合并成功!\n"); print(&L3); printf("\n\n"); }
运行结果:
相关文章推荐
- 数据结构基础 - 两个有序链表序列的合并
- 数据结构与算法(二)合并两个有序链表
- 数据结构与算法[LeetCode]—两个有序数组合并及找中点问题
- 数据结构(3):两个有序线性结构的合并
- [数据结构]单链表 合并两个非递减有序表成新表也是非递减表
- 数据结构——算法之(033)(两个有序单链表合并为一个有序的单链表)
- 02-线性结构1 两个有序链表序列的合并(15 分)
- C/C++,数据结构实现两个链表的合并(尾插法建立单链表,求链表长度,直接插入排序)
- 数据结构与算法题目集(中文)——5-53 两个有序序列的中位数 (25分)——链表
- PTA-线性结构1 两个有序链表序列的合并
- 02-线性结构1 两个有序链表序列的合并——中国大学MOOC-陈越、何钦铭-数据结构-2017秋
- 02-线性结构1 两个有序链表序列的合并
- 实战数据结构(3)_两个单链表间的合并操作
- 线性结构 1 两个有序链表序列的合并
- 02-线性结构1 两个有序链表序列的合并
- 线性结构1 两个有序链表序列的合并
- 02-线性结构1 两个有序链表序列的合并(15 分)
- 02-线性结构1 两个有序链表序列的合并
- [数据结构]02-线性结构1 两个有序链表序列的合并
- 02-线性结构1 两个有序链表序列的合并