zoukankan      html  css  js  c++  java
  • 有序表的合并

    顺序有序表的合并

    此为简单的非递减有序排列,以整数为例:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 typedef int Elem;
     5 
     6 typedef struct
     7 {
     8     Elem *elem;
     9     int len;
    10 }List;
    11 
    12 void createList(List &L);            //创建有序表
    13 void traverse(List L);               //遍历有序表
    14 void mergeList(List La,List Lb,List &Lc);//合并有序表
    15 
    16 int main()
    17 {
    18    List La,Lb,Lc;
    19 
    20    createList(La);     //创建La
    21    createList(Lb);     //创建Lb
    22 
    23    traverse(La);       //遍历
    24    traverse(Lb);       //遍历
    25 
    26    mergeList(La,Lb,Lc);//合并
    27 
    28    traverse(Lc);   //遍历Lc
    29 
    30    return 0;
    31 }
    32 
    33 void createList(List &L)
    34 {
    35   printf("input the length:
    ");             //输入想要创建有序表的长度
    36   scanf("%d",&L.len);
    37 
    38   L.elem = (Elem*)malloc(sizeof(Elem)*L.len); //动态分配内存
    39 
    40   for(int i=0;i<L.len;i++)
    41   {
    42       printf("input the %d data:
    ",i);         
    43       scanf("%d",&L.elem[i]);             //输入数据,创建有序表
    44   }
    45 
    46 }
    47 
    48 void traverse(List L)
    49 {
    50     for(int i=0;i<L.len;i++)
    51     {
    52       printf("%d ",L.elem[i]);          //遍历有序表
    53     }
    54      printf("
    ");
    55 }
    56 
    57 void mergeList(List La,List Lb,List &Lc)
    58 {
    59     Lc.len = La.len + Lb.len;           //表Lc的长度;
    60     Lc.elem = (Elem *)malloc(sizeof(Elem)*Lc.len);       //为表Lc分配内存;
    61 
    62     int *pa = La.elem;     //指针pa,pb的初始值分别指向两个表的第一个元素;
    63     int *pb = Lb.elem;
    64     int *pc = Lc.elem;     //pc指向新表的第一个元素;
    65 
    66     int *pa_last = La.elem+La.len-1;  //指针pa_last,pb_last指向两个表的最后一个元素
    67     int *pb_last = Lb.elem+Lb.len-1;
    68 
    69     while((pa<=pa_last)&&(pb<=pb_last))       //La,Lb未达到表尾时
    70     {
    71         if(*pa<=*pb) *pc++ = *pa++;       //可理解为*pa = *pc;pc++;pa++;选择较小的值插入到Lc中;
    72         else *pc++ = *pb++;               
    73     }
    74 
    75     while(pa<=pa_last) *pc++ = *pa++;  //Lb已到达表尾,依次将La的余下元素插入到Lc的最后;
    76     while(pb<=pb_last) *pc++ = *pb++;  //同上
    77 
    78 }

         

  • 相关阅读:
    ASP.NET之Application、Session和Cookie的差别
    Android 最火高速开发框架AndroidAnnotations使用具体解释
    关于牛逼的顺丰--也谈管理
    SIFT特征提取分析
    [置顶] 网页提交方式post和get的区别和联系
    xcode 5.0 以上去掉icon高亮方法&amp;iOS5白图标问题
    我是怎样成长为系统架构师的
    怎样使用oracle 的DBMS_SQLTUNE package 来执行 Sql Tuning Advisor 进行sql 自己主动调优
    UDP用户数据报协议和IP分组
    使用Java高速实现进度条
  • 原文地址:https://www.cnblogs.com/wwww2/p/11630323.html
Copyright © 2011-2022 走看看