实验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
相关推荐
CodeByV2 分钟前
【算法题】位运算
数据结构·算法
郝学胜-神的一滴9 分钟前
李航《机器学习方法》全面解析与高效学习指南
人工智能·python·算法·机器学习·数学建模·scikit-learn
CS创新实验室10 分钟前
奈奎斯特定理:信号处理与通信领域的基石理论
计算机网络·算法·信号处理·奈奎斯特定理
雪花desu13 分钟前
【Hot100-Java简单】/LeetCode 283. 移动零:两种 Java 高效解法详解
数据结构·python·算法
随意起个昵称14 分钟前
【做题总结】顺子(双指针)
c++·算法
一杯咖啡Miracle21 分钟前
UV管理python环境,打包项目为docker流程
python·算法·docker·容器·uv
玉树临风ives26 分钟前
atcoder ABC438 题解
数据结构·算法
算法与编程之美34 分钟前
探索不同的损失函数对分类精度的影响
人工智能·算法·机器学习·分类·数据挖掘
MSTcheng.38 分钟前
【C++】平衡树优化实战:如何手搓一棵查找更快的 AVL 树?
开发语言·数据结构·c++·avl
-Excalibur-39 分钟前
ARP RIP OSPF BGP DHCP以及其他计算机网络当中的通信过程和广播帧单播帧的整理
c语言·网络·python·学习·tcp/ip·算法·智能路由器