实验2-顺序表(优化版)

写一个主程序来上机设计并验证线性表顺序表示的所有操作(至少包含算法2.3、2.4、2.5),并设计一个算法删除所有值大于min而且小于max的元素。

顺序表结构体

cpp 复制代码
typedef int ElemType;
typedef struct{
	ElemType data[MaxSize];
	int length;
}SqList;

打印顺序表

cpp 复制代码
void visit(SqList L)
{
	for(int i=0;i<L.length;i++)
		cout<<L.data[i]<<" ";
	cout<<endl;
}

初始化顺序表

cpp 复制代码
void InitList(SqList &L)
{
	for(int i=0;i<MaxSize;i++)
		L.data[i]=0;
	L.length=0;
}

插入

cpp 复制代码
bool ListInsert(SqList &L,int i,ElemType e)
{
	if(i<1||i>L.length+1) return false;
	if(L.length>=MaxSize) return false;
	for(int j=L.length;j>=i;j--)
		L.data[j]=L.data[j-1];
	L.data[i-1]=e;
	L.length++;
	return true;
}

删除

cpp 复制代码
bool ListDelete(SqList &L,int i,ElemType &e)
{
	if(i<1||i>L.length) return false;
	e=L.data[i-1];
	for(int j=i;j<L.length;j++){
		L.data[j-1]=L.data[j];
	}
	L.length--;
	return true;
}

删除所有大于min且小于max的元素

cpp 复制代码
void MidDelete(SqList &L)
{
	int min=L.data[0];
	int max=L.data[0];
	int e;
	for(int i=0;i<L.length;i++){
		if(L.data[i]<min){
			min=L.data[i];
		}
		if(L.data[i]>max){
			max=L.data[i];
		}
	}
	int i=0;
	while(i<L.length){
		if(min<L.data[i] && L.data[i]<max){
			ListDelete(L,i+1,e);
		}else{
			i++;
		}
	}
}

主函数

cpp 复制代码
int main()
{
	SqList L;
	InitList(L);
	srand(time(NULL));
	for(int i=1;i<=10;i++)
		ListInsert(L,i,rand()%100);
	visit(L);
	int e;
	ListDelete(L,1,e);
	visit(L);
	ListInsert(L,1,e);
	visit(L);
	MidDelete(L);
	visit(L);
	return 0;
}

完整代码

cpp 复制代码
#include <iostream>
#define MaxSize 10
#include <time.h>
using namespace std;
typedef int ElemType;
typedef struct{
	ElemType data[MaxSize];
	int length;
}SqList;
void visit(SqList L)
{
	for(int i=0;i<L.length;i++)
		cout<<L.data[i]<<" ";
	cout<<endl;
}
void InitList(SqList &L)
{
	for(int i=0;i<MaxSize;i++)
		L.data[i]=0;
	L.length=0;
}
bool ListInsert(SqList &L,int i,ElemType e)
{
	if(i<1||i>L.length+1) return false;
	if(L.length>=MaxSize) return false;
	for(int j=L.length;j>=i;j--)
		L.data[j]=L.data[j-1];
	L.data[i-1]=e;
	L.length++;
	return true;
}
bool ListDelete(SqList &L,int i,ElemType &e)
{
	if(i<1||i>L.length) return false;
	e=L.data[i-1];
	for(int j=i;j<L.length;j++){
		L.data[j-1]=L.data[j];
	}
	L.length--;
	return true;
}
void MidDelete(SqList &L)
{
	int min=L.data[0];
	int max=L.data[0];
	int e;
	for(int i=0;i<L.length;i++){
		if(L.data[i]<min){
			min=L.data[i];
		}
		if(L.data[i]>max){
			max=L.data[i];
		}
	}
	int i=0;
	while(i<L.length){
		if(min<L.data[i] && L.data[i]<max){
			ListDelete(L,i+1,e);
		}else{
			i++;
		}
	}
}
int main()
{
	SqList L;
	InitList(L);
	srand(time(NULL));
	for(int i=1;i<=10;i++)
		ListInsert(L,i,rand()%100);
	visit(L);
	int e;
	ListDelete(L,1,e);
	visit(L);
	ListInsert(L,1,e);
	visit(L);
	MidDelete(L);
	visit(L);
	return 0;
}

输出示例

bash 复制代码
66 53 86 60 48 19 97 42 97 96
53 86 60 48 19 97 42 97 96
66 53 86 60 48 19 97 42 97 96
19 97 97
相关推荐
计算机小白一个2 小时前
蓝桥杯 Java B 组之设计 LRU 缓存
java·算法·蓝桥杯
万事可爱^2 小时前
HDBSCAN:密度自适应的层次聚类算法解析与实践
算法·机器学习·数据挖掘·聚类·hdbscan
大数据追光猿4 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
Dream it possible!4 小时前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
夏末秋也凉4 小时前
力扣-回溯-46 全排列
数据结构·算法·leetcode
南宫生4 小时前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
柠石榴5 小时前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯
Leuanghing5 小时前
【Leetcode】11. 盛最多水的容器
python·算法·leetcode
qy发大财5 小时前
加油站(力扣134)
算法·leetcode·职场和发展
王老师青少年编程5 小时前
【GESP C++八级考试考点详细解读】
数据结构·c++·算法·gesp·csp·信奥赛