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

Posted J.double

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了考研数据结构-顺序表(综合应用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("合并失败 "); 
} 

技术分享图片

 

以上是关于考研数据结构-顺序表(综合应用3)-合并顺序表的主要内容,如果未能解决你的问题,请参考以下文章

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

考研数据结构与算法线性表

考研数据结构模板:顺序表链表栈队列

2023数据结构考研复习-线性表

2023数据结构考研复习-线性表

数据结构——线性表顺序表示