《数据结构》习题刷刷刷2(第二章线性表的顺序表示)

文章目录

          • 04.从有序顺序表中删除其值在给定值s与t之间(要求s
          • 05.从顺序表中删除其值在给定值s与t之间(包含s和t,要求s
          • 06.从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。
          • 07.将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。
          • 08.已知在一维数组A[m+n]中依次存放两个线性表(a1,a2,a3,,am)和(b1,b2,b3,,bn,).编写一个函数,将数组中两个顺序表的位置互换,即将(b1,b2,b3,…,bn)放在(a1,a2,a3,…,am)的前面。
          • 09.线性表(a1,a2,a3,…,an)中的元素递增有序且按顺序存储于计算机内。要求设计一个算法,完成用最少时间在表中查找数值为x的元素,若找到,则将其与后继元素位置相交换,若找不到,则将其插入表中并使表中元素仍递增有序
          • 10.【2010统考真题】设将n(n>1)个整数存放到一维数组R中。设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据由(X0,X1,…,Xn-1)变换为(化Xp,Xp+1,Xn-1,X0,X1,…,Xp-1.要求:1)给出算法的基本设计思想。2)根据设计思想,采用C或C+或Java语言描述算法,关键之处给出注释. 3)说明你所设计算法的时间复杂度和空间复杂度。
          • 11.【2011统考真题】一个长度为L(L≥1)的升序序列S,处在第「L/2个位置的数称为S的中位数.例如,若序列S1=(11,13,15,17,19),则S,的中位数是15,两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2,4,6,8,20),则S1和S2的中位数是11。现在有两个等长升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列A和B的中位数。要求:1)给出算法的基本设计思想。2)根据设计思想,采用C或C+或Java语言描述算法,关键之处给出注释.3)说明你所设计算法的时间复杂度和空间复杂度。
          • 12.【2013统考真题】已知一个整数序列A=(a0,a1,……,an-1),其中0≤ai<n(0≤i<n).若存在ap1=ap2=…=apm=x且m>n/2(0≤pk<n,1≤k≤m),则称x为A的主元素.例如A=(0,5,5,3,5,7,5,5),则5为主元素:又如A=(0,5,5,3,5,1,5,7),则A中没有主元素。假设A中的n个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出A的主元素。若存在主元素,则输出该元素;否则输出-1。要求:1)给出算法的基本设计思想,一2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释,3)说明你所设计算法的时间复杂度和空间复杂度。
          • 13.【2018统考真题】给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。例如,数组{-5,3,2,3}中未出现的最小正整数是1;数组{1,2,3)中未出现的最小正整数是4.要求:1)给出算法的基本设计思想,2)根据设计思想,采用C或C++语言描述算法,关健之处给出注释,3)说明你所设计算法的时间复杂度和空间复杂度。[。。。。。。]
          • 14.【2020统考真题】定义三元组(a,b,c)(a、b、c均为正数)的距离D=a-b1+b-c+1c-d。给定3个非空整数集合S、S2和S,按升序分别存储在3个数组中。请设计一个尽可能高效的算法,计算并输出所有可能的三元组(a,b,c)(a∈S1,b∈S2,c∈S)中的最小距离。例如S1={-1,0,9},S2={-25,-10,10,11},S={2,9,17,30,41},则最小距离为2,相应的三元组为(9,10,9)。要求:1)给出算法的基本设计思想。2)根据设计思想,采用C语言或C++语言描述算法,关键之处给出注释。3)说明你所设计算法的时间复杂度和空间复杂度。

04.从有序顺序表中删除其值在给定值s与t之间(要求s

错误示范:

bool Del_s_t(Sqlist &L,Elemtype s,Elemtype t){
   
if(s>=t||L.lengths == 0)
return false;
int k=0,i;
for(i=0;i<L.length-1;i++){
   
if(s<L.data[i]&&L.data[i]<t)
k++;
else
L.data[i-k]=L.data[i];
}
L.length = L.length-k;
return ture;
}

说实话,习题答案我看不懂(如下所示):

bool Del_s_t(Sqlist &L,Elemtype s,Elemtype t)
{
   
	int i,j;
	if(s>=t||L.length==0)
		return false;
	for(i=0;i<L.length&&L.data[i]<s;i++);//得i个小于s的元素
	if(i>=L.length)
	return false;
	for(j=i;j<L.length&&L.data[j]<=t;j++);//有;号,j=i,得j个既大于s又小于t的元素
	for(;j<L.length;i++,j++)
		L.data[i]=L.data[j];//j继续自加,相当于省略删除了符合题意的中间的元素
	L.length = i;
	return false;
}
05.从顺序表中删除其值在给定值s与t之间(包含s和t,要求s
bool Del_s_t(Sqlist &L,Elemtype s,Elemtype t){
   
if(s>=t||L.lengths == 0)
return false;
int k=0,i;
for(i=0;i<L.length-1;i++){
   
if(L.data[i]>=s&&L.data[i]<=t)
	k++;
else
	L.data[i-k]=L.data[i];
}
L.length = L.length-k;
return ture;
}
06.从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。

错误示范:

bool Delete_Same(Sqlist &L)
{
   
if(L.length==0)
return false;
int sum_k = 0;
for(int i=0;i<L.length-1;i++)
{
   
	int k=0;
	for(int j=i+1;j<L.length;j++)
	{
   
		if(L.data[i]==L

你可能感兴趣的:(数据结构习题刷刷刷,数据结构,算法,排序算法)