zoukankan      html  css  js  c++  java
  • 考研数据结构-顺序表(综合应用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("合并失败 "); 
    } 

  • 相关阅读:
    ubuntu 查看进程,查看服务
    ubuntu16.04下配置静态ip
    php监听客户端连接状态
    Excel有用的宏
    openfire插件开发1
    linux ps命令
    转:linux下面/usr/local和opt目录有何区别
    linux 开机自启动软件(包含xampp方法)
    转:java两个jre目录和三个lib目录
    linux PATH环境变量
  • 原文地址:https://www.cnblogs.com/double891/p/9126267.html
Copyright © 2011-2022 走看看