C语言实现合并两个有序(从小到大)顺序表为一个顺序表
2017-05-11 17:18
483 查看
#include<stdio.h> #include<malloc.h> typedef int ElemType; typedef int status; # define LIST_INIT_SIZE 100 # define OK 1 # define OVERFLOW -1 typedef struct{ ElemType *elem; int length; int listsize; } SqList; //初始化线性表 status InitList_Sq(SqList *L){ L-> elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType)) ; if(!L->elem) exit(OVERFLOW); L->length = 0; L->listsize = LIST_INIT_SIZE; return OK; } //创建有序表并为其赋值 void Create_sq(SqList *L){ int i,n; printf("创建一个有序表!\n"); printf("输入有序表里的元素个数:"); scanf("%d",&n); L->length = n; for(i=0;i < n;i++){ printf("输入第%d个元素的值:",i+1); scanf("%d",&L->elem[i]); printf("\n"); } } //打印有序表 void Disp_Sq(SqList L){ int i,n; n = L.length; for(i=0;i<n;i++){ printf("%5d",L.elem[i]); } printf("\n"); } //合并有序表 void Combine(SqList *la,SqList lb){ int i = la->length - 1,j = lb.length - 1; while(i >= 0 && j >= 0){ if(la->elem[i] <= lb.elem[j]){ if (!la->elem[i + 1]) { la->elem[i + 1] = lb.elem[j]; }else{ for (int k = la->length - 1; k >= i+1; --k) { la->elem[k +1] = la->elem[k]; } la->elem[i + 1] = lb.elem[j]; } la->length++; j--; }else{ i--; } } } main(){ SqList sla; SqList slb; InitList_Sq(&sla); InitList_Sq(&slb); Create_sq(&sla); Create_sq(&slb); Combine(&sla,slb); Disp_Sq(sla); }
运行结果:
相关文章推荐
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- 把两个从大到小的有序链表合并成一个链表,新的链表是一个从小到大的有序链表
- 递归实现合并两个有序链表成一个链表依然有序
- 用递归方法实现两个链表head1和head2各自有序,请把它们合并成一个链表仍然有序。(c/c++)
- C语言实现:合并两个有序的数组,合并后的数组依然有序
- java实现把两个有序数组合并到一个数组的实例
- [leetcode]Merge Sorted Array (两个有序数组的合并 C语言实现)
- c语言数据结构中两个有序链表合并为一个新链表
- 将两个有序顺序表合并成一个新的有序顺序表
- java实现把两个有序数组合并到一个数组
- PAT 2-11 两个有序链表序列的合并(C语言实现)
- 探讨:将两个链表非降序合并为一个链表并依然有序的实现方法
- 算法1-两个由小到大的有序集合合并成一个由大到小的集合(JAVA实现)
- 两个有序单链表合并成一个有序单链表的java实现
- 两个有序单链表合并成一个有序单链表的java实现
- K个有序链表共N个结点在O(NlgK)时间合并为一个新的有序链表实现文件C语言