实验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
相关推荐
WWZZ20259 分钟前
ORB_SLAM2原理及代码解析:SetPose() 函数
人工智能·opencv·算法·计算机视觉·机器人·自动驾驶
小马学嵌入式~41 分钟前
堆排序原理与实现详解
开发语言·数据结构·学习·算法
青岛少儿编程-王老师43 分钟前
CCF编程能力等级认证GESP—C++6级—20250927
java·c++·算法
一人の梅雨1 小时前
1688 拍立淘接口深度开发:从图像识别到供应链匹配的技术实现
人工智能·算法·计算机视觉
_给我学起来1 小时前
数据结构:树
数据结构
Miraitowa_cheems2 小时前
LeetCode算法日记 - Day 64: 岛屿的最大面积、被围绕的区域
java·算法·leetcode·决策树·职场和发展·深度优先·推荐算法
Christo32 小时前
关于K-means和FCM的凸性问题讨论
人工智能·算法·机器学习·数据挖掘·kmeans
_不会dp不改名_2 小时前
leetcode_1382 将二叉搜索树变平衡树
算法·leetcode·职场和发展
greentea_20133 小时前
Codeforces Round 173 B. Digits(2043)
c++·算法
m0_743106464 小时前
LOBE-GS:分块&致密化效率提升
人工智能·算法·计算机视觉·3d·几何学