• 考研数据结构-顺序表(综合应用3)-合并顺序表


    本节代码主要来自王道单科18页的综合应用题。

    七、将两个有序顺序表合并成一个新的有序顺序表,并由函数返回结果顺序表

    易忘点:合并以前需要先判断一下是否大于C的最大长度。

    核心代码:

    bool merge(Sqlist A,Sqlist B,Sqlist &C){
        if(A.length+B.length>MaxSize) return false;  //容易忘记 
        int i=0,j=0,k=0;
        while(i<=A.length-1&&j<=B.length-1){
            if(A.data[i]<=B.data[j]){
                C.data[k++]=A.data[i++];
            }
            else C.data[k++]=B.data[j++];
        }
        while(i<=A.length-1){
            C.data[k++]=A.data[i++];
        }
        while(j<=B.length-1){
            C.data[k++]=B.data[j++];
        }
        C.length=A.length+B.length;  //第一次居然写出了C.length=A.length+B.length-2;  真的很离谱。 
        //也可以写成C.length=k+1; 
        return true;
    }

    全部代码:

    #include<stdio.h>
    #define true 1
    #define false 0
    #define MaxSize 100          
    #define ElemType int
    #define Status int 
    
    typedef struct{
        ElemType data[MaxSize];        
        int length;           
    }Sqlist;
    
    //构造一个空的线性表L 
    void InitList(Sqlist &L){
        L.length=0;
    }
    
    
    bool ListInsert(Sqlist &L,int i,ElemType e){ 
    //将元素e插到顺序表L中第i个位置 
        if(i<1||i>L.length+1)
            return false;
        if(L.length>=MaxSize)
            return false;
        for(int j=L.length;j>=i;j--)
            L.data[j]=L.data[j-1];
        L.data[i-1]=e;
        L.length++;
        return true;
    }
    
    
    void ListLoad(Sqlist L){
        if(L.length==0){
            printf("当前顺序表为空
    ");
            return;
        }
        printf("当前顺序表元素为:");
        for(int i=0;i<L.length;i++)
            printf("%d ",L.data[i]);
        printf("
    ");
        return;
    }
    
    bool merge(Sqlist A,Sqlist B,Sqlist &C){
        if(A.length+B.length>MaxSize) return false;  //容易忘记 
        int i=0,j=0,k=0;
        while(i<=A.length-1&&j<=B.length-1){
            if(A.data[i]<=B.data[j]){
                C.data[k++]=A.data[i++];
            }
            else C.data[k++]=B.data[j++];
        }
        while(i<=A.length-1){
            C.data[k++]=A.data[i++];
        }
        while(j<=B.length-1){
            C.data[k++]=B.data[j++];
        }
        C.length=A.length+B.length;  //第一次居然写出了C.length=A.length+B.length-2;  真的很离谱。 
        //也可以写成C.length=k+1; 
        return true;
    }
    
    
    int main(){
        Sqlist A;
        Sqlist B;
        Sqlist C;
        InitList(A);
        InitList(B);
        InitList(C); 
        ListInsert(A,1,9);
        ListInsert(A,1,8);
        ListInsert(A,1,7);
        ListInsert(A,1,4);
        ListInsert(B,1,8);
        ListInsert(B,1,5);
        ListInsert(B,1,5);
        ListInsert(B,1,1);    
        ListInsert(B,1,1);    
        ListLoad(A);
        ListLoad(B);
        if(merge(A,B,C)) {
            printf("合并成功 ");
            ListLoad(C);
        }
        else printf("合并失败 "); 
    } 

  • 相关阅读:
    EF 事务
    关于C#如何将Word转换成PDF的方法汇总
    莫德纳公司
    C# 填充pdf 模板生成报告
    自定义滚动条的样式
    Docker 大势已去,Podman 即将崛起……
    一款基于 Spring Boot 开发的 OA 项目,已开源,真香..
    当你运行npm run命令时,会发生什么?
    Java遇上SPL:架构优势和开发效率,一个不放过
    如何使用Python实现图像融合及加法运算?
  • 原文地址:https://www.cnblogs.com/double891/p/9126267.html
Copyright © 2020-2023  润新知