zoukankan      html  css  js  c++  java
  • 线性表之有序表(二路归并)

    二路归并的有趣算法分别用顺序表和单链表的两种实现方式

    1.求解中位数

    2./*采用顺序表存放有序表,二路归并算法

    void UnionList(SqList LA,SqList LB,SqList &LC)
    {
    int i = 0;//i,j分别为LA,LB的小标
    int j = o;
    int k = 0;//k为LC中元素个数
    LC = (SqList
    )malloc(sizeof(SqList));//建立有序顺序表LC
    while(ilength&&jlength)
    {
    if(LA->data[i]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(ilength)//LA尚未扫描完毕,将其余元素插入到LC中
    {
    LC->data[k] = LA->data[i]
    i++;
    k++;
    }
    whlie(jlength)//LB尚未扫描完毕,将其余元素插入到LC中
    {
    LC->data[k] = LB->data[j];
    j++;
    k++;
    }
    LC->length = k;
    }
    //本算法的时间复杂度和空间复杂度都为O(m+n);
    3.//采用单链表存放有序表,二路归并算法如下
    void UnionList(LinkList LA,LinkList LB,LinkList &LC)
    {
    LinkList pa = LA->next,pb = LB->next,
    r,
    s;
    LC = (LinkList
    )malloc(sizeof(LinkList));//创建LC的头节点
    r = LC;//r始终指向LC的尾节点
    while(pa!=NULL&&pb!=NULL)
    {
    if(pa->datadata)
    {
    s=(LinkList
    )malloc(sizeof(LiakList));//复制节点
    s->data = pa->data;
    r->next = s;
    r = s; //r始终指向尾节点
    pa = pa->next;
    }
    else
    {
    s = (LinkList
    )malloc(sizeof(LinkList));
    s->data = pb->data;
    r->next = s;
    r = s;
    pb = pb->next;
    }
    }
    while(pa!=NULL)
    {
    s = (LinkList)malloc(sizeof(LinkList));//复制节点
    s->data = pa->data;
    r->next = s;//尾插法将s插入到LC
    r = s;
    pa = pa->next;
    }
    whlie(pb!=NULL)
    {
    s = (LinkList
    )malloc(sizeof(LinkList));
    s->data = pb->data;
    r->next = s;
    r = s;
    pb = pb->next;
    }
    r->next = NULL;//尾节点的next置为空
    }

  • 相关阅读:
    数据结构实现时的注意事项
    用编程解决生活中的问题
    用编程解决生活中的问题
    中英文对照 —— 生物学基本概念
    中英文对照 —— 生物学基本概念
    面向对象 —— 对类(class)的理解
    面向对象 —— 对类(class)的理解
    百家姓 —— 特别的姓氏与姓氏的由来
    百家姓 —— 特别的姓氏与姓氏的由来
    英文段子
  • 原文地址:https://www.cnblogs.com/huqingqing2/p/14221243.html
Copyright © 2011-2022 走看看