实验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
相关推荐
郝学胜-神的一滴5 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
颜酱7 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
m0_736919107 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi9878387 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
DuHz7 小时前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理
Polaris北极星少女8 小时前
TRSV优化2
算法
代码游侠9 小时前
C语言核心概念复习——网络协议与TCP/IP
linux·运维·服务器·网络·算法
2301_763472469 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
abluckyboy9 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
园小异10 小时前
2026年技术面试完全指南:从算法到系统设计的实战突破
算法·面试·职场和发展