数据结构 实验二

一.需求分析

必须利用实验一实现的线性表ADT,完成下面的题目。
对于给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值。
【输入形式】
  输入第一行包含一个整数n。
  第二行包含n个正整数,相邻整数之间使用一个空格分隔。
【输出形式】
输出一个整数,表示答案。
【样例输入】
5
1 5 4 8 20
【样例输出】
1
【样例说明】
相差最小的两个数是5和4,它们之间的差值是1。
【样例输入】
5
9 3 6 1 3
【样例输出】
0

样例分析

【样例输入】
5
1 5 4 8 20
【样例输出】
1
简单运行步骤
1.输入5
2.输入五个数字储存进数组
3.数组进行从小到大的排序(sort循环)
例:1 4 5 8 20
4.int一个变量x等于第二个数减去第一个数的差值
5.之后的一个差值与x相比,比x小的就将差值赋值给x
在这里插入图片描述

二.概要设计

1.抽象数据类型
为实现上述程序的功能, 可以用整数存储用户的输入。并将用户输入的值存储于线性表中。
抽象数据类型设计:
数据对象:一组整数
数据关系:一组整数通过键盘依次输入,按照输入的先后次序,满足线性特征,即 <ai,ai+1>(0≤a<n)。
基本操作:准备一个能够存储一组整数的存储空间,存储整数
ADT:
数据对象:name marry【name】
基本操作:

List() {}
  virtual~List() {}  //析构,构造函数
  virtual void append(const E& it) = 0;  //操作功能  添加
  virtual void next() = 0;  //操作,移到下一个结点
  virtual void moveToStart() = 0;//操作 移到当前位置
  virtual const E &getValue() const = 0;//操作 获取当前位置的值

1.算法的基本思想
寻找最小值,最基本就是整数的存储符合线性的特点。可以采用顺序表来实现线性表,完成出列顺序的输出。

核心算法可以主要分为两步:
1.将整数存储到线性表中,并且进行从小到大的排序
2.两两相减,将差值存储在线性表中,并且与第一个差值相比,如果小于第一个差值,就将值赋值给第一个差值。
首先,我们可以先输入一个整数a,然后定义一个数组,再输入a个整数。运用sort循环将数从小到大排序。再两两相减,作出差值存储在线性表中。再作比较。

2.程序流程
程序有三个模块组成:
(1)输入模块:无提示语句,第一行输入总数 n,第二行依次输入整数,中间用空格隔开。
(2)处理模块:将元素的个数存储于顺序表中,再用sort循环。再作相减。差值相比较。
(3)输出模块:输出最小的差值

三.详细设计

1.物理数据模型
由于输入数据是整数,所以数据类型用 int。由于一组整数通过键盘依次输入,按照输入的先后次序,满足线性特征, 所以物理数据结构为线性结构
2.输入和输出的格式
输入为整数,输出也为整数
3.算法的具体步骤
ADT具体实现

	for(int i=1;i<name;i++)
	{
		aa.append(marry[i]-marry[i-1])int name;
	cin>>name;//输入 
	int marry[name];
	for(int i=0;i<name;i++)
	{cin>>marry[i];     //for循环输入 }
	sort(marry,marry+name);//sort函数,按大小排列
	LList<int>aa(1000);//利用链表存储数据 
	int p=0;p++;}
	aa.moveToStart();
	int x=marry[1]-marry[0];//存储在链表的每一个值为差值 
	for(int i=1;i<=p;i++)
	{if(aa.getValue()<x)
	{x=aa.getValue();}
	aa.next();

3.算法的时空分析
(1)初始化部分为循环赋值,时间复杂度为n
(2)中间使用for循环找出差值,时间复杂度也为m
综上所述,时间复杂度为n

四.测试结果

在这里插入图片描述

在这里插入图片描述

ADT的定义,即物理数据结构的实现
问题分析:
1.我们需要处理的数据是int型整数
2.首先需要实现的功能是输入一个数字以及一个数组。并且进行大小排序,找出最小差值
3.运用for循环输入数字储存在数组里面。运用sort函数进行大小排序,运用for循环以及if语句来判断最小差值
4.最后输出最小差值
算法分析
每个功能设计的伪代码的时间复杂度都为1,主函数之中时间复杂度为n

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值