数据结构 —— 线性表的所有操作(看完之后408必120+)(2)

带你做一下王道上面的部分题型

为了屏幕前的你着想,那就给你把题抄上,就为了能得到您的一个赞,呜呜呜。。孩子太可怜了
来个简单的试试吧!

简单小题目

01 将最小值元素在顺序表中删除并且返回被删除元素的值,并将最后的元素填补进去,若顺序表为空的话,就要显示Result Error,并退出运行。
解答思想:
首先我们要先找到最小值然后再进行删除,这个题目没有时间复杂度要求,对于非大佬神仙类学生,时间有限,暴力出奇迹吧!
找到它并且删除它。

bool deleteElemet(SqList &L, ElemType &e)
{
	//删除L中最小值元素的节点,用e返回
	if(L.length==0)
	{
		printf("Result Error! ");
		return false;					//顺序表为空,中止返回
	}
	e=L.data[0];		//初始化赋值min
	int flag=0;
	for(int i=0;i

来个大题

2020真题
 定义三元组(a, b, c)(其中a, b, c均为正数)的距离D=|a-b| + |b-c| + |c-a|。给定三个非空整数集合S1、S2和S3,按升序分别存储在3个数组中。设计一个尽可能高效的算法,计算并输出所有可能的三元组(a, b, c)(a∈S1, b∈S2, c∈S3)中的最小距离。要求:
 (1)给出算法的基本设计思想。
 (2)根据设计思想,采用 C 或 C++语言描述算法,关键之处给出注释。
 (3)说明你所设计算法的时间复杂度和空间复杂度。

解答思想:
(1)
注:问设计思想,分步写答案,抓关键字→(集合,数组)==>顺序表/队列,注意出题人给你的线索(正数,距离)
①扫描三个顺序表S1,S2,S3,将三个顺序表中的非正数删除。
②初始化D_min(a=S1[0],b=S2[0],c=S3[0],i,j,k为S1,S2,S3的序数)代入距离D最短距离然后计算S1[i]、S2[j]、S3[k]之间的D。
③若D ④i,j,k下标依次加1,即固定i变化j,然后固定j变化k,计算D。
⑤输出结果D_min。

(2)算法实现


int abs(int a,int b)
{//计算绝对值。
	int sum=0;
	if(a-b<0)
	{m_
		sum=b-a;
	}
	else
	{
		sum =a-b;
	}
	return sum;
}
//王道书里明确要求是a,b,c是正数,所以我们要改一下表
int*  S_tripper(int S[],l)
{
	for(int i=0;i0)
	{
		D=abs(S1[i],S2[j])+abs(S2[j],S3[k])+abs(S1[i],S3[k]);//计算D
		if(D

(3)
计算时间复杂度 n=(|S1|+|S2|+|S3|),为O(n),空间复杂度为O(1)。

你可能感兴趣的:(笔记)