数据结构实验1:C++实现静态顺序表类

本文详细介绍了使用C++实现静态顺序表的实验,包括实验目的、要求、任务,以及顺序表的相关操作如查找、插入、删除等。通过一系列测试数据验证了算法的正确性和效率,附带了源代码文件供参考。
摘要由CSDN通过智能技术生成

       写了3个多小时,还是太慢了、太菜了!

图1 程序运行演示截图1

      

                                            实验1

1.1 实验目的

       熟练掌握线性表的顺序存储结构。

       熟练掌握顺序表的有关算法设计。

       根据具体问题的需要,设计出合理的表示数据的顺序结构,并设计相关算法。

1.2 实验要求

       顺序表结构和运算定义,算法的实现以库文件方式实现,不得在测试主程序中直接实现;

       比如存储、算法实现放入文件:seqList.h

       实验程序有较好可读性,各运算和变量的命名直观易懂,符合软件工程要求;

       程序有适当的注释。

1.3 实验任务

       编写算法实现下列问题的求解。

       <1>求顺序表中第i个元素(函数),若不存在,报错。

       实验测试数据基本要求:

       第一组数据:顺序表长度n≥10,i分别为5,n,0,n+1,n+2

       第二组数据:顺序表长度n=0,i分别为0,2

       <2>在第i个结点前插入值为x的结点。

       实验测试数据基本要求:

       第一组数据:顺序表长度n≥10,x=100,  i分别为5,n,n+1,0,1,n+2

       第二组数据:顺序表长度n=0,x=100,i=5

       <3>删除顺序表中第i个元素结点。

       实验测试数据基本要求:

       第一组数据:顺序表长度n≥10,i分别为5,n,1,n+1,0

       第二组数据:顺序表长度n=0, i=5

       <4>在一个递增有序的顺序表L中插入一个值为x的元素,并保持其递增有序特性。

       实验测试数据基本要求:

       顺序表元素为(10,20,30,40,50,60,70,80,90,100),

       x分别为25,85,110和8

       <5>将顺序表L中的奇数项和偶数项结点分解开(元素值为奇数、偶数),分别放入新的顺序表中,然后原表和新表元素同时输出到屏幕上,以便对照求解结果。

       实验测试数据基本要求:

       第一组数据:顺序表元素为(1,2,3,4,5,6,7,8,9,10,20,30,40,50,60)

       第二组数据:顺序表元素为(10,20,30,40,50,60,70,80,90,100)

       <6>求两个递增有序顺序表L1和L2中的公共元素,放入新的顺序表L3中。

       实验测试数据基本要求:

       第一组

       第一个顺序表元素为(1,3,6,10,15,16,17,18,19,20)

       第二个顺序表元素为(1,2,3,4,5,6,7,8,9,10,18,20,30)

       第二组

       第一个顺序表元素为(1,3,6,10,15,16,17,18,19,20)

       第二个顺序表元素为(2,4,5,7,8,9,12,22)

       第三组

       第一个顺序表元素为()

       第二个顺序表元素为(1,2,3,4,5,6,7,8,9,10)

       <7>删除递增有序顺序表中的重复元素,并统计移动元素次数,要求时间性能最好。

       实验测试数据基本要求:

       第一组数据:顺序表元素为(1,2,3,4,5,6,7,8,9)

       第二组数据:顺序表元素为(1,1,2,2,2,3,4,5,5,5,6,6,7,7,8,8,9)

       第三组数据:顺序表元素为(1,2,3,4,5,5,6,7,8,8,9,9,9,9,9)

1.4* 顺序表扩展实验

       非必做内容,有兴趣的同学选做,

       <1>递增有序顺序表L1、L2,对2表进行合并,并使得合并后成为一个集合,集合的元素放回L1表中保存,要求时间性能最好。

       <2>(递增有序)顺序表表示集合A、B,实现:

       C=A∩B,C=A∪B,C=A-B

       A=A∩B,A=A∪B,A=A-B

       <3>(递增有序)顺序表表示集合A、B,判定A是否B的子集。

       <4>(2011)(15 分)一个长度为L(L≥1)的升序序列S,处在第L/2个位置的数称为S 的中位数。例如,若序列S1=(11, 13, 15, 17, 19),则S1 的中位数是15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2, 4, 6, 8, 20),则S1 和S2 的中位数是11。

       现有两个等长升序序列A 和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列A 和B 的中位数。要求:

        (1)给出算法的基本设计思想。

       (2)根据设计思想,采用C 或C++语言描述算法,关键之处给出注释。

       (3)说明你所设计算法的时间复杂度和空间复杂度。

1.5 运行结果截图

图2 测试(1)①

图3 测试(1)②

图4 测试(2)①

图5 测试(2)②

图6 测试(3)①

图7 测试(3)②

图8 测试(4)

图9 测试(5)①

图10 测试(5)②

图11 测试(6)①

图12 测试(6)②

图13 测试(6)③

图14 测试(7)①

图15 测试(7)②

图16 测试(7)③

1.6 附源代码

       utilities.h文件:

//#include <stdc++.h>

#include <iostream>
#include <cstdio>
#include <iomanip>
#include <ctime>
#include <cmath>
#include <algorithm>

typedef int elementType;
const int maxn = 10000 + 13; // 0x7fffffff; // 2147483647+13;
using namespace std;

 SeqList.h文件:

class SeqList  
{
public:
	SeqList();
	virtual ~SeqList();
	void printList();
	int Length();
	int locate( elementType value );//返回第一个值为value的位置,没有则返回-1
	bool isEmpty();//判空
	bool isFull();//判满
	bool getElement( int pos, elementType& value );//获取pos位置的值
	bool insertListByIndex( int pos, elementType value );//在pos位置前插入value值
	bool insertListRear( elementType value );//在尾部插入value值
	bool deleteListNodeByIndex( int pos, elementType& value );//按位置删除元素
	bool deleteListNodeByValue( int value );//按值删除元素
	bool deleteListNodeByValueAll( int value );//按值删除所有对应元素

	bool incInsert( int value );//插入保持递增有序
	bool oddEvenPartition( SeqList& LA, SeqList& LB);//顺序表奇数偶数分类
	bool intersectionSet( SeqList& LA, SeqList& LB, SeqList& LC );//求两递增顺序表交集
	bool delRepeatedNodePoorPerformance( int& shiftCount );//删除重复元素
	bool delRepeatedNodeHighPerformance( int& shiftCount );//删除重复元素
	bool unionSet( SeqList& LA, SeqList& LB );//求并集
	bool unionSet( SeqList& LB );//求并集


	bool unionSet( SeqList& LA, SeqList& LB, SeqList& LC );//求并集
	bool subTractSet( SeqList& LA, SeqList& LB, SeqList& LC );// 求差集

	bool intersectionSet( SeqList& LA, SeqList& LB );//求交集
	bool subTractSet( SeqList& LA, SeqList& LB );// 求差集

	bool subSet( SeqList& LA, SeqList& LB );//判断A是否为B的子集

	int midSearch( SeqList& LA, SeqList& LB );//输出两等长升序序列的中位数
	
	void SeqList_Sort();// 使用库函数 sort 对顺序表元素进行升序排序

	//bool SeqList::delRepeatedNode
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值