顺序表的合并

文章讲述了如何在已知两个顺序表LA和LB,其元素按值非递减排序的情况下,合并它们形成新的顺序表LC,同时保持LC的元素值非递减。涉及到的操作包括顺序表的初始化、合并函数MergeList_Sq的编写等。
摘要由CSDN通过智能技术生成
任务描述

本关任务:已知两个顺序表A和B,数据元素按值非递减有序排列,现将A和B归并成一个新的顺序表C,使C中的数据元素仍按值非递减有序排列。 例如: 设 A=(3,5,8,11) B=(2,6,9,15,20) 则 C=(2,3,5,6,8,9,11,15,20)

相关知识

为了完成本关任务,你需要掌握:1. 顺序表的类型定义,2.顺序表涉及的主要操作。

顺序表的类型定义

定义如下:

 
 
  1. #define MAXSIZE 100 //最大长度
  2. typedef int ElemType; // 数据元素的类型
  3. typedef struct {
  4. ElemType *elem; //指向数据元素的起始地址
  5. int length; //线性表的当前长度
  6. }SqList;
顺序表涉及的主要操作

主要操作如下:

  • 顺序表的初始化:构造一个最多可存储MAXSIZE个数据元素的顺序表,并将其初始状态设置为length=0,即为空表。该操作函数具体定义如下:

     
       
    1. void SL_Initiate(SqList &L)
  • 释放顺序表:释放L.elem所指向的用于存储数据元素的存储空间。该操作函数具体定义如下:

     
       
    1. void SL_Free(SqList &L)
  • 判断顺序表是否为空:若为空表,则返回true,否则返回false。该操作函数具体定义如下:

     
       
    1. bool SL_IsEmpty(SqList L)
  • 判断顺序表是否已满:若顺序表达到最大长度,则返回 true,否则返回false。该操作函数具体定义如下:

     
       
    1. bool SL_IsFull(SqList L)
  • 创建顺序表:输入n个数据元素,创建一个顺序表。该操作函数具体定义如下:

     
       
    1. void SL_Create(SqList &L,int n)
  • 输出顺序表: 输出整个顺序表。该操作函数具体定义如下:

     
       
    1. void SL_Print(SqList L)
  • 顺序表的合并: 已知顺序表LALB的元素按值非递减排列,归并LALB得到新的顺序表LCLC的元素也按值非递减排列。该操作函数具体定义如下:

     
编程要求

根据提示,在右侧编辑器中补充代码,完成MergeList_Sq操作函数,以实现顺序表的合并。具体要求如下:

MergeList_Sq: 已知顺序表LALB的元素按值非递减排列,归并LALB得到新的顺序表LCLC的元素也按值非递减排列。

提示:已知顺序表 AB 中的数据元素按值非递减有序排列,现要求将 AB 归并为一个新的顺序表 C ,且 C 中的数据元素仍按值非递减有序排列。

例如:

 
 
  1. A=(1,7,8)
  2. B=(2,4,6,8,10,11)
  3. 则合并后的C=(1,2,4,6,7,8,8,10,11)
测试说明

平台会对你编写的代码进行评测,测试文件为step2/Main.cpp,可在右侧文件夹中进行查看:

测试输入:

4 //输入A表的元素个数 3 5 8 11 //输入4个数据元素,创建A表 7 //输入B表的元素个数 2 6 8 9 11 15 20 //输入7个数据元素,创建B表

预期输出:

2 3 5 6 8 8 9 11 11 15 20 //输出合并后的C表

/*************************************************************
    顺序表的合并  实现文件
    更新于2020年4月13日  
**************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include "Seqlist.h"

void SL_Initiate(SqList &L)
// 顺序表的初始化,即构造一个空的顺序表
{
	L.elem = (ElemType*)malloc(sizeof(ElemType)*MAXSIZE);
	L.length=0;
}

void SL_Free(SqList &L)
// 释放顺序表
{
	free(L.elem);
}

bool SL_IsEmpty(SqList L)
// 判断顺序表是否空
{
	return L.length==0;
}

bool SL_IsFull(SqList L)
// 判断顺序表是否满
{
	return L.length==MAXSIZE;
}

void SL_Create(SqList &L,int n)
// 输入n个数据元素,创建一个顺序表L
{
	int i;
	L.length=n;
	for(i=0; i<n; i++)
		scanf("%d", &L.elem[i]);		
}

void SL_Print(SqList L)
// 输出整个顺序表
{
	if (L.length==0)
	{
		printf("The slist is empty.\n");		
		return;
	}

	for (int i=0; i<L.length; i++)
		printf("%d  ", L.elem[i]);
	printf("\n");	
}

void MergeList_Sq(SqList LA,SqList LB,SqList &LC)
//已知顺序表LA和LB的元素按值非递减排列
//归并LA和LB得到新的顺序表LC,LC的元素也按值非递减排列。
{
	// 请在这里补充代码,完成本关任务
    /********** Begin *********/
int i,j,p;
i=0;
j=0;
p=0;
LC.length=LA.length+LB.length;
    while(i<LA.length&&j<LB.length)
    if(LA.elem[i]<=LB.elem[j])
       LC.elem[p++]=LA.elem[i++];
       else
       LC.elem[p++]=LB.elem[j++];
       while(i<LA.length)
       LC.elem[p++]=LA.elem[i++];
       while(j<LB.length)
       LC.elem[p++]=LB.elem[j++];
	/********** End **********/
} 

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

STM32单片机定制

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值