实验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
相关推荐
萌动的小火苗25 分钟前
嵌入式开发中的栈与队列:任务调度为什么依赖数据结构
数据结构·c++·单片机·嵌入式硬件
叩码以求索28 分钟前
统计按位或能得到最大值的子集数目(一)
数据结构·算法
tachibana21 小时前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode
txzrxz1 小时前
单调队列讲解
数据结构·c++·算法·单调队列
不会就选b2 小时前
算法日常・每日刷题--<快排>4
算法
Keven_112 小时前
算法札记:树状数组的用途
数据结构·算法
用户677437175812 小时前
C++函数参数传递方式详解:string、string&、const string、const string&该怎么选?
算法
cpp_25012 小时前
P1540 [NOIP 2010 提高组] 机器翻译
数据结构·c++·算法·队列·noip·洛谷题解
晚笙coding2 小时前
LeetCode 98:验证二叉搜索树 —— 从局部判断到全局范围约束的递归思想
算法·leetcode·职场和发展
学计算机的计算基3 小时前
回溯算法下篇:四道经典题讲透约束剪枝、原地标记、预计算与状态压缩
java·笔记·算法