• 顺序有序表的合并


    今天又看到了顺序有序表的合并,好神奇(≧▽≦)/

    于是就试啦一下๑乛◡乛๑

    sequential list head.h头文件

    #ifndef SEQUENTIAL_LIST_HEAD_H_INCLUDED
    #define SEQUENTIAL_LIST_HEAD_H_INCLUDED
    
    #define MAXSIZE 100    //顺序表最大长度
    #define ElemType int
    #define OK 1
    #define ERROR 0
    #define OVERFLOW -2
    typedef int Status;
    
    typedef struct
    {
        ElemType *elem;    //储存空间的基地址
        int length;        //当前长度
    } Sqlist;
    
    Status InitList(Sqlist &L);                      //初始化线性表
    Status GetElem(Sqlist L,int i,ElemType &e);      //取值
    Status LocateElem(Sqlist L,ElemType e);          //查找
    Status ListInsert(Sqlist &L,int i,ElemType e);   //插入
    Status ListDelete(Sqlist &L,int i);              //删除
    void TraverseList(Sqlist L);                     //遍历
    Sqlist CreatList(int n);                       //创建(类似于链表的创建)
    
    
    #endif // SEQUENTIAL_LIST_HEAD_H_INCLUDED
    


    合并功能的函数

    void mergeList(Sqlist a,Sqlist b,Sqlist &c)
    {//已知顺序有序表a和b递增排列,归并a,b得有序表c,也递增排列。
        c.length=a.length+b.length;
        c.elem=new ElemType[c.length];
        ElemType *pa,*pb,*pc,*pa_last,*pb_last;
        pc=c.elem;                     //指针pc指向新表的第一个元素
        pa=a.elem;pb=b.elem;           //指针pa和pb的初值分别指向两个表的第一元素
        pa_last=a.elem+a.length-1;     //指针pa_last指向a的最后一个元素
        pb_last=b.elem+b.length-1;     //指针pb_last指向b的最后一个元素
        while(pa<=pa_last&&pb<=pb_last)     //表a和b均为达到表尾
        {
            if(*pa<=*pb)       //依次“摘取”两表中的最小值插入表c
                *pc++=*pa++;
            else
                *pc++=*pb++;
        }
        while(pa<=pa_last)   //b已达到表尾,依次将a中剩余元素插入
            *pc++=*pa++;
        while(pb<=pb_last)   //a已达到表尾,依次将b中剩余元素插入
            *pc++=*pb++;
    }


    main.c文件

    #include <iostream>
    #include "sequential list head.h"
    
    void mergeList(Sqlist a,Sqlist b,Sqlist &c);
    
    using namespace std;
    
    int main() //用于测试的主函数
    {
        int n;
        Sqlist LA,LB,LC;
        cout<<"input the long of data about LA:";
        cin>>n;
        LA=CreatList(n);
        cout<<"input the long of data about LB:";
        cin>>n;
        LB=CreatList(n);
        mergeList(LA,LB,LC);
        TraverseList(LC);
        return 0;
    }
    
    void mergeList(Sqlist a,Sqlist b,Sqlist &c)
    {//已知顺序有序表a和b递增排列,归并a,b得有序表c,也递增排列。
        c.length=a.length+b.length;
        c.elem=new ElemType[c.length];
        ElemType *pa,*pb,*pc,*pa_last,*pb_last;
        pc=c.elem;                     //指针pc指向新表的第一个元素
        pa=a.elem;pb=b.elem;           //指针pa和pb的初值分别指向两个表的第一元素
        pa_last=a.elem+a.length-1;     //指针pa_last指向a的最后一个元素
        pb_last=b.elem+b.length-1;     //指针pb_last指向b的最后一个元素
        while(pa<=pa_last&&pb<=pb_last)     //表a和b均为达到表尾
        {
            if(*pa<=*pb)       //依次“摘取”两表中的最小值插入表c
                *pc++=*pa++;
            else
                *pc++=*pb++;
        }
        while(pa<=pa_last)   //b已达到表尾,依次将a中剩余元素插入
            *pc++=*pa++;
        while(pb<=pb_last)   //a已达到表尾,依次将b中剩余元素插入
            *pc++=*pb++;
    }
    




  • 相关阅读:
    win 10打开administrator
    Navicat
    mkpasswd
    恢复不小心删除的文件
    mysql双主出现1602错误
    scp远程拷贝文件免密办法
    iredmail邮箱服务器部署
    keepalived+nginx后端服务器access_log出现127.0.0.1的访问记录
    lsof 简介
    Codeforces #536 div2 E (1106E)Lunar New Year and Red Envelopes (DP)
  • 原文地址:https://www.cnblogs.com/zhanyeye/p/9746131.html
Copyright © 2020-2023  润新知