27.顺序表练习题目(1)(2023王道数据结构2.2.3前8题)

【这里所有解答都写的是全部代码,目的是让大家能够直接复制上手运行,感受代码的运行过程,而不单单只是写了一个函数】

试题1:(王道2023数据结构综合应用题1)

从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值,空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。

#include
#include

using namespace std;
#define MaxSize 10
#define ElemType int

//顺序表的建立 
typedef struct{
	int data[MaxSize];  //存储空间的基地址
	int length;  //当前长度 
}SqList;
	 
//顺序表的初始化
void InitList(SqList &L){
	L.length = 0;
	cout<<"顺序表初始化完成"<>L.data[i];
		L.length++;
	}
}
	
//打印顺序表 
int Print(SqList L){
	cout<<"目前顺序表为:"<>n;	 //输入数组的长度n
	SqList L;
	InitList(L);  //顺序表的初始化
	CreatList(L,n);	 //顺序表传值 
	Print(L);  //打印顺序表
	Del_Min(L);  //删除顺序表中的最小值
	Print(L);  //再次打印输出
	return 0;
}

输出:

请输入顺序表长度
5
顺序表初始化完成
请传入数值
3 7 5 2 4
目前顺序表为:
3       7       5       2       4
目前顺序表为:
3       7       5       4

试题2:(王道2023数据结构综合应用题2)

设计一个高效算法,将顺序表中的所有元素逆置,要求算法的空间复杂度是O(1);

#include
#include

using namespace std;
#define MaxSize 10
#define ElemType int

//顺序表的建立 
typedef struct{
	int data[MaxSize];  //存储空间的基地址
	int length;  //当前长度 
}SqList;
	 
//顺序表的初始化
void InitList(SqList &L){
	L.length = 0;
	cout<<"顺序表初始化完成"<>L.data[i];
		L.length++;
	}
}
	
//打印顺序表 
int Print(SqList L){
	cout<<"目前顺序表为:"<>n;	 //输入数组的长度n
	SqList L;
	InitList(L);  //顺序表的初始化
	CreatList(L,n);	 //顺序表传值 
	Print(L);  //打印顺序表
	Reverse(L);  //将顺序表逆置
	Print(L);  //再次打印输出
	return 0;
}

输出:

请输入顺序表长度
5
顺序表初始化完成
请传入数值
5 4 32 1 8
目前顺序表为:
5       4       32      1       8
目前顺序表为:
8       1       32      4       5

试题3:(王道2023数据结构综合应用题3)

对长度为n的顺序表L,设计一个时间复杂度为O(n),空间复杂度为O(1)的算法,删除线性表中所有值为x的元素。

#include
#include

using namespace std;
#define MaxSize 10
#define ElemType int

//顺序表的建立 
typedef struct{
	int data[MaxSize];  //存储空间的基地址
	int length;  //当前长度 
}SqList;
	 
//顺序表的初始化
void InitList(SqList &L){
	L.length = 0;
	cout<<"顺序表初始化完成"<>L.data[i];
		L.length++;
	}
}
	
//打印顺序表 
int Print(SqList L){
	cout<<"目前顺序表为:"<>n;	 //输入数组的长度n
	SqList L;
	InitList(L);  //顺序表的初始化
	CreatList(L,n);	 //顺序表传值 
	Print(L);  //打印顺序表
	cout<<"请输入删除元素"<>x;	 //输入删除的元素x
	del_x(L,x);  //删除所有值为x的元素
	Print(L);  //再次打印输出
	return 0;
}

输出:

请输入顺序表长度
6
顺序表初始化完成
请传入数值
2 2 3 5 2 4
目前顺序表为:
2       2       3       5       2       4
请输入删除元素
2
目前顺序表为:
3       5       4

试题4/5:(王道2023数据结构综合应用题4/5)

从(有序)顺序表中删除值在s,t之间(要求s小于t),如果s和t的值不合理或顺序表为空,则显示出错信息并退出运行。

道理和题3差不多,只是要修改比较条件。这里假定顺序表不是有序的。

#include
#include

using namespace std;
#define MaxSize 10
#define ElemType int

//顺序表的建立 
typedef struct{
	int data[MaxSize];  //存储空间的基地址
	int length;  //当前长度 
}SqList;
	 
//顺序表的初始化
void InitList(SqList &L){
	L.length = 0;
	cout<<"顺序表初始化完成"<>L.data[i];
		L.length++;
	}
}
	
//打印顺序表 
int Print(SqList L){
	cout<<"目前顺序表为:"<t) cout<<"s和t的值非法"<= s && L.data[i] <= t)
			j = j + 1;
		L.data[i+1 - j] = L.data[i+1];
	}
	L.length = L.length - j;
	return 0;
} 

int main(){
	int n,e,s,t;
	cout<<"请输入顺序表长度"<>n;	 //输入数组的长度n
	SqList L;
	InitList(L);  //顺序表的初始化
	CreatList(L,n);	 //顺序表传值 
	Print(L);  //打印顺序表
	cout<<"请输入删除元素的下界"<>s;	 //输入删除的元素下界s
	cout<<"请输入删除元素的上界"<>t;	 //输入删除的元素上界t
	del_x_st(L,s,t);  //删除所有值在s和t之间的元素
	Print(L);  //再次打印输出
	return 0;
}

输出:

请输入顺序表长度
6
顺序表初始化完成
请传入数值
2 2 3 5 4 3
目前顺序表为:
2       2       3       5       4       3
请输入删除元素的下界
3
请输入删除元素的上界
4
目前顺序表为:
2       2       5

试题6(王道2023数据结构综合应用题6):

删除顺序表中所有重复元素

这道题就不能按照前3,4,5题写:以下是错误示例:

int del(SqList &L){
//删除所有重复元素
	if (L.length == 0) cout<<"顺序表为空"<

这段代码的输出结果是这样的:

目前顺序表为:
1       2       2       3       3       4
目前顺序表为:
1       2       4

分析:当i=2的时候,data[1]和data[2]相等。j变为1,于是data[2]就改为3,此时顺序表变为1,2,3,3,3,4。相当于多引入了一次重复。这样本来原顺序表只有两次重复,现在变成了3次。

正确解法:

#include
#include

using namespace std;
#define MaxSize 10
#define ElemType int

//顺序表的建立 
typedef struct{
	int data[MaxSize];  //存储空间的基地址
	int length;  //当前长度 
}SqList;
	 
//顺序表的初始化
void InitList(SqList &L){
	L.length = 0;
	cout<<"顺序表初始化完成"<>L.data[i];
		L.length++;
	}
}
	
//打印顺序表 
int Print(SqList L){
	cout<<"目前顺序表为:"<>n;	 //输入数组的长度n
	SqList L;
	InitList(L);  //顺序表的初始化
	CreatList(L,n);	 //顺序表传值 
	Print(L);  //打印顺序表
	del(L);  //删除所有重复元素
	Print(L);  //再次打印输出
	return 0;
}

输出:

请输入顺序表长度
6
顺序表初始化完成
请传入数值
1 2 2 3 3 4
目前顺序表为:
1       2       2       3       3       4
目前顺序表为:
1       2       3       4

试题7(王道2023数据结构综合应用题7):

将两个有序顺序表合并成一个有序顺序表

#include
#include

using namespace std;
#define MaxSize 10
#define ElemType int

//顺序表的建立 
typedef struct{
	int data[MaxSize];  //存储空间的基地址
	int length;  //当前长度 
}SqList;
	 
//顺序表的初始化
void InitList(SqList &L){
	L.length = 0;
	cout<<"顺序表初始化完成"<>L.data[i];
		L.length++;
	}
}
	
//打印顺序表 
int Print(SqList L){
	cout<<"目前顺序表为:"<>n1;	 //输入数组的长度n
	SqList L1;
	InitList(L1);  //顺序表的初始化
	CreatList(L1,n1);	 //顺序表传值 
	Print(L1);  //打印顺序表
	cout<<"请输入顺序表L2长度"<>n2;	 //输入数组的长度n
	SqList L2;
	InitList(L2);  //顺序表的初始化
	CreatList(L2,n2);	 //顺序表传值 
	Print(L2);  //打印顺序表
	Print(Merge(L1,L2));  //打印输出合并之后的顺序表
	return 0;
}

输出:

请输入顺序表L1长度
4
顺序表初始化完成
请传入数值
1 2 3 5
目前顺序表为:
1       2       3       5
请输入顺序表L2长度
4
顺序表初始化完成
请传入数值
2 3 6 8
目前顺序表为:
2       3       6       8
目前顺序表为:
1       2       2       3       3       5       6       8

试题8(王道2023数据结构综合应用题8):

已知在一维数组A[m+n]中依次存放两个线性表(a1, a2, a3...am)和(b1, b2, b3...bn),将数组中两个顺序表的位置互换。也就是把(b1, b2, b3...bn)放在(a1, a2, a3...am)的前面。

直接暴力求解:

#include
#include

using namespace std;
#define MaxSize 10
#define ElemType int

//顺序表的建立 
typedef struct{
	int data[MaxSize];  //存储空间的基地址
	int length;  //当前长度 
}SqList;
	 
//顺序表的初始化
void InitList(SqList &L){
	L.length = 0;
	cout<<"顺序表初始化完成"<>L.data[i];
		L.length++;
	}
}
	
//打印顺序表 
int Print(SqList L){
	cout<<"目前顺序表为:"<>n1;	 //输入数组的长度n
	cout<<"请输入顺序表L2长度"<>n2;	 //输入数组的长度n
	SqList L;
	InitList(L);  //顺序表的初始化
	CreatList(L,n1+n2);	 //顺序表传值 
	Print(L);  //打印顺序表
	Print(Merge(L,n1,n2));  //打印输出交换之后的顺序表
	return 0;
}

输出:

请输入顺序表L1长度
3
请输入顺序表L2长度
4
顺序表初始化完成
请传入数值
1 2 3 4 5 6 7
目前顺序表为:
1       2       3       4       5       6       7
目前顺序表为:
4       5       6       7       1       2       3

你可能感兴趣的:(数据结构,算法,数据结构,c++,开发语言)