考研数据结构-顺序表(综合应用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("当前顺序表为空\n");
        return;
    }
    printf("当前顺序表元素为:");
    for(int i=0;i<L.length;i++)
        printf("%d ",L.data[i]);
    printf("\n");
    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("合并失败 ");
} 

原文地址:https://www.cnblogs.com/double891/p/9126267.html

时间: 2024-10-09 08:51:13

考研数据结构-顺序表(综合应用3)-合并顺序表的相关文章

数据结构例程——合并有序表

本文针对数据结构基础系列网络课程(2):线性表中第15课时有序表. 问题:有两个有序表LA和LB,将它们合并成一个有序表LC.要求不破坏原有表LA和LB 算法思想: 解法1:用顺序表实现(支持的算法库,及list.h文件,请点击链接-) #include "list.h" void UnionList(SqList *LA,SqList *LB,SqList *&LC) { int i=0,j=0,k=0; //i.j.k分别作为LA.LB.LC的下标 LC=(SqList *

合并顺序表

将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表C,已知顺序表A和B的的元素个数分别为m和n 思想:设定3个指针i,j,k分别指向A.B.C的首地址,然后进行A[i].B[j]的比较,A[i]>B[j],则将B[j]赋值给C[k],同时j,k自增,否则对A进行相似的操作,直到A.B中至少有一数组 元素全都赋值完成,最后将另一数组剩下的元素赋值到C尾部 #include <stdio.h> #include <stdlib.h> #define ElemType in

数据结构第一次作业(学生信息管理系统-顺序表&amp;&amp;链表)

实验目的 : 1 .掌握线性表的定义: 2 .掌握线性表的基本操作,如建立.查找.插入和删除等. 实验内容: 定义一个包含学生信息(学号,姓名,成绩)的的 顺序表和链表,使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息: (2) 逐个显示学生表中所有学生的相关信息: (3) 根据姓名进行查找,返回此学生的学号和成绩: (4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩): (5) 给定一个学生信息,插入到表中指定的位置: (6) 删除指定位置的学生记录: (7) 统计表中

考研数据结构之绪论

数据结构 第一章 绪论(数据结构基本概念) 1.1数据结构基本概念 1.数据   数据是信息的载体,是描述客观事物属性的数.字符及能够被输入到计算机并被计算机程序处理的符号的总称.如,1-100的整数. 2.数据元素 数据元素是数据的基本单位,作为一个整体进行处理. (在数据结构课程中,通常将数据元素简称为元素,并误将元素和节点混用,实际上两者是有区别的,数据元素是逻辑概念,在设计存储结构时,数据元素映射成元素或节点,如顺序存储结构中,一个数据元素直接映射成元素,在链式存储结构中,一个数据元素映

4. 蛤蟆的数据结构进阶四静态查询之索引顺序查询

4. 蛤蟆的数据结构进阶四静态查询之索引顺序查询 本篇名言:"凡是新的事情在起头总是这样一来的,起初热心的人很多,而不久就冷淡下去,撒手不做了,因为他已经明白,不经过一番苦工是做不成的,而只有想做的人,才忍得过这番痛苦. --陀思妥也夫斯基" 我们继续静态查询的索引顺序查询. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47264703 1.  索引顺序查询 首先把表长为n的线性表分成b块,前b-1块记录个数为s

深入浅出数据结构C语言版(9)——多重表(广义表)

在深入浅出数据结构系列前面的文章中,我们一直在讨论的表其实是"线性表",其形式如下: 由a1,a2,a3,--a(n-1)个元素组成的序列,其中每一个元素ai(0<i<n)都是一个"原子","原子"的意思就是说元素本身是一个个体,所有元素都是相同的结构. 但是在我们常见的某些应用,比如Excel的表格中,我们发现表并不一定是线性表,Excel中的表就明显是二维的结构 那么在数据结构中,我们会使用这种广义上的表吗?答案是会,我们也会.或

Java数据结构和算法(十三)——哈希表

Hash表也称散列表,也有直接译作哈希表,Hash表是一种根据关键字值(key - value)而直接进行访问的数据结构.它基于数组,通过把关键字映射到数组的某个下标来加快查找速度,但是又和数组.链表.树等数据结构不同,在这些数据结构中查找某个关键字,通常要遍历整个数据结构,也就是O(N)的时间级,但是对于哈希表来说,只是O(1)的时间级. 注意,这里有个重要的问题就是如何把关键字转换为数组的下标,这个转换的函数称为哈希函数(也称散列函数),转换的过程称为哈希化. 1.哈希函数的引入 大家都用过

数据结构实验之图论二:基于邻接表的广度优先搜索遍历

数据结构实验之图论二:基于邻接表的广度优先搜索遍历 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列.(同一个结点的同层邻接点,节点编号小的优先遍历) 输入 输入第一行为整数n(0< n <100),表示数据的组数. 对于每组数据,第一行是三个整数k,m,t(0<k<100,0<m<(k-1)*k/2,

《数据结构、算法与应用》8.(顺序查找数组中第一个出现指定元素的位置)

最近在读<数据结构.算法与应用>这本书,把书上的习题总结一下,用自己的方法来实现了这些题,可能在效率,编码等方面存在着很多的问题,也可能是错误的实现,如果大家在看这本书的时候有更优更好的方法来实现,还请大家多多留言交流多多指正,谢谢 8. 从左至右检查数组a[0:n-1]中的元素,以查找雨x相等的那些元素.如果找到一个元素与x相等,则函数返回x第一次出现所在的位置.如果在数组中没有找到这样的元素,函数则返回-1. // // main.cpp // Test_08 // // Created

线性表的顺序存储结构之顺序表类的实现_Java

在上一篇博文--线性表接口的实现_Java中,我们实现了线性表的接口,今天让我们来实现线性表的顺序存储结构--顺序表类. 首先让我们来看下顺序表的定义: 线性表的顺序存储是用一组连续的内存单元依次存放线性表的数据元素,元素在内存的物理存储次序与它们在线性表中的逻辑次序相同,即元素ai与其直接前驱ai-1及直接后继ai+1的存储位置相邻.顺序存储的线性表也成为顺序表(sequential list). 顺序表类SeqList提供线性表基于顺序存储结构的一种实现,它有两个私有成员变量table和n,