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 }

         

  • 相关阅读:
    苹果开发者账号多少钱?个人/公司/企业申请费用及怎么选【都有】
    uniapp ios真机调试【亲测有效】
    Uniapp---IOS打包证书私钥密码怎么获取?
    微信小程序地图计算两个点之间的距离
    各大地理坐标系互转
    解决mac下vscode等应用中vim光标无法快速移动
    python 脚本如何在后代运行并记录标准输出
    wkhtmltox 在Linux上安装
    shell中的##*,%%*问题
    matplotlib、seaborn 展示中文字体
  • 原文地址:https://www.cnblogs.com/wwww2/p/11630323.html
Copyright © 2011-2022 走看看