最小差值(线性表的应用)

写在前面:仅为个人代码/总结,未必标准,仅供参考!如有错误,还望指出交流,共同进步!

最小差值

【问题描述】
对于给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值。请基于线性表ADT完成程序设计。

【问题分析】
① 处理对象:n个正整数
② 实现的功能:通过线性表的功能找出n个数据中相差(差的绝对值)最小的两个数,并输出它们差值的绝对值。
③ 处理后的数据结果以一个整数的形式输出。
④ 设计求解方法(算法思想):首先将输入的n个数据依次插入顺序表表尾,声明变量Min并初始化为顺序表前两个元素的差值的绝对值,然后依次计算n个数据两两差值的绝对值并与Min进行比较,若存在比Min小的差值则以此值更新Min的值。

样例求解:
5
1 5 4 8 20
求解过程:
声明变量min=fabs(1-5)=4;
fabs(1-4)=3<4,min=3;f
abs(1-8)=7;
fas(1-20)=19;f
abs(5-4)=1<3,min=3;
fabs(5-8)=3;
fabs(5-20)=15;
fabs(4-8)=4;
fabs(4-20)=16;
fabs(8-20)=12;
最终结果为1。

【抽象数据类型设计】
① 数据对象的结构特征:输入的n个正整数为线性结构。
② ADT设计:
1) 数据对象:int类型的正整数
2) 数据关系:n个整数以输入的顺序插入表尾形成前后关系
3) 基本操作:
a. Append():在线性表末尾插入新的元素,输入为新元素,输出为长度增1的顺序表
b. 获取当前元素的值getValue():获取curr位置的元素的值;
c. 移动curr到表头moveToStart():将curr指向表头元素;
d. 移动curr到指定位置moveToPos(int):将curr指向指定位置的元素;
e. curr往后移动以为next():将curr指向下一个元素;

【基于ADT的成员函数设计定义(以顺序表为例)】

Append():
	void Append(const E&it)//在顺序表尾追加it
    {
    
    
        assert(listSize<maxSize);
        listArray[listSize++]=it;
}
getValue()
	const E& getValue() const
    {
    
    
        assert((curr>=0)&&(curr<listSize));
        return listArray[curr];
}
moveToStart()
	void moveToStart(){
    
    curr=0;}
moveToPos()
	void moveToPos(int pos)
    {
    
    
        assert((pos>=0)&&(pos<=listSize));
        curr=pos;
}
next()
	void next(){
    
    if(curr<listSize) curr++;}

【核心代码】
①依次将n个元素插入顺序表表尾:

for(int i=0;i<n;i++)
{
    
    
        cin>>m;//输入数据
        L.Append(m);//调用Append()函数
}

②声明变量Min并初始化为顺序表前两个元素的差值的绝对值:

int u=L.getValue();//获取顺序表表头元素的值
L.next();//调用next()函数
int v=L.getValue();//获取顺序表第二个元素的值
int Min=fabs(u-v);//声明并初始化
L.moveToStart();

③依次计算n个数据两两差值的绝对值并与Min进行比较,实时更新Min的取值:

L.moveToStart();//将curr移到表头
//计算当前元素与其后面的每个元素的差值的绝对值
for(int i=0;i<n-1;i++)
{
    
    
  	L.moveToPos(i);//将curr移到指定位置
	int a=L.getValue();//获取当前位置的元素的值
 	for(int j=i+1;j<n;j++)
	{
    
    
		L.next();//curr后移
        int b=L.getValue();//获取i之后某个元素的值
        int c=fabs(a-b);//计算差值
        if(c<Min) {
    
    Min=c;}//更新Min值
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45909595/article/details/115285762