基于顺序表的非递减有序表的合并

本文介绍了如何编程实现非递减有序线性表的基本操作,包括求前驱、后继、插入、删除等,并给出了验收测试用例。特别地,讨论了两个非递减有序线性表的合并,要求在合并过程中保留重复元素。测试用例涵盖了各种边界情况,确保操作的正确性。
摘要由CSDN通过智能技术生成

编程实现顺序表下教材第二章定义的线性表的基本操作,并根据已经实现的基本操作,实现两个非递减有序的线性表的合并,注意,合并时,如果有重复的元素,请保留一个。

前言

(a)求前驱是指,输入一个元素值(而不是位置),求该元素在顺序表中的直接前驱元素值。求后继是指:输入一个元素值(而不是位置),求该元素在顺序表中的直接后继元素值;(b)为了方便修改数据元素的类型,请使用类型重定义,可以方便修改线性表中的数据元素的类型;(c)大部分函数的返回结果应是函数执行是否成功的一种状态,执行成功了,才返回具体的结果值;(d)对每个功能进行测试时,要求把不合法的情况也测试一下。具体见下面的测试用例;(e)采用菜单形式对应各个操作,使其编成一个完整的小软件,参考界面如下。

验收/测试用例
通过菜单调用各个操作,测试点:
1、没有初始化前进行其他操作,程序是否能控制住;即,如果没有初始化线性表,其他的功能是无法正常进行的,如果选择进行其他操作,要提示先进行初始化;
2、初始化一个顺序表(初始化顺序表,是指初始化一个空的线性表,里面的元素个数是0);
3、插入数据(位置, 数据),要测插入位置不合法的情况(0,1)、(2,1),正确插入3个数据(1,20)、(1,10)、(3,30);
4、显示顺序表中的数据,屏幕输出10, 20, 30;
5、判空,屏幕输出顺序表非空;
6、输出顺序表长度,屏幕输出3;
7、获取指定位置元素,要测指定位置在【1,3】范围之外的情况和之内的情况;
8、定位,输入:40, 输出:不存在,输入20,输出位置为2;
9、求直接前驱,要测求第一个元素的前驱、不存在顺序表中的元素的直接前驱,其他元素的直接前驱;输入10,输出:第一个元素没有前驱,输入20,输出前驱是10,输入40,输出该元素不存在;
10、求直接后继,要测最后一个元素的后继、不存在顺序表中的元素的直接后继,其他元素的直接后继;同上求前驱;
11、删除,要测位置在【1,3】范围之外的情况和之内的情况;
12、清空操作后再测长度,判断是否为空;
13、销毁顺序表,销毁线性表之后还能不能做插入,删除等操作,如果选其他操作,就要提示线性表已经销毁不存在;
14、测试合并操作,第一个线性表中的元素是(2,3,4,5),第二个线性表中的内容是(1,4,5,6,7),合并后的结果,请输出。

#include<iostream>
#include<cstdio>
#include<cstdlib> 
#define Length 1000
#define AddLength 500
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
using namespace std;
//完成表的建立,插入,删除,排序,销毁,查找 
	int n,i,e,d;
	typedef struct {
   
		ElemType *elem;
		int length;
		int listsize;
}SqList;
void bin(SqList &L,SqList &M){
   
	printf("请再创建一个线性表!");
	printf("\n");
	int n;
	int i;
	M.elem=(ElemType *)malloc(Length*sizeof(ElemType));
	if(!M.elem)
		exit(0);
	M.listsize=Length;
	printf("请输入数字个数:");
	scanf("%d",&n);
	printf("请输入数据:");
	for(i=0;i<=n-1;i++)
		scanf("%d",&M.elem[i]);
	M.length=n;
	printf("\n创建成功.\n");
	for(int x = 0;x < M.length;x++){
   
		int count = 0;
		for(int j = 0;j < L.length;j++){
   
			if(L.elem[j] == M.elem[x]){
   
				count += 1;
			}
		}
		if(count == 0){
   
			L.elem[L.length++] = M.elem[x];
		}
	}
}//case 13:
void InitList(SqList &L)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值