基于C++实现顺序表 增删查改等基本功能 全实现 代码整洁 注释详细


实现的东西

本文是基于c++实现顺序表的帖子
定义函数一览:

在这里插入图片描述
实现了
void InitList(Seqlist* L) ;//顺序表的初始化

int ListEmpty(Seqlist* L) ;//顺序表为空的标志是否为空

int ListLength(Seqlist* L) ;//求顺序表的长度

int getElem(Seqlist* L, int num, Datatype* e) ;//按序号查找元素

int ContentElem(Seqlist* L, Datatype x) ;//按内容查找顺序表,查找与给定元素相等的元素,如果查找成功返回序号

int InsertList(Seqlist* L, int d, Datatype x) ;//顺序表插入操作,参数为顺序表list和插入的位置和插入的数据

int DeleteList(Seqlist* L, int d, Datatype* e) ;//删除下标是d的数据,用*e保存被删除的元素

void show(Seqlist* L) ;//打印出顺序表的数据

void move(Seqlist* L, Datatype n) ;n基准的数
move函数是博主自己加的和顺序表的基本操作没有关系,功能是实现:将传入的顺序表L的所有比传入数n小的放n前面
所有比n大的数放n后面

一、各函数

<1>顺序表的初始化

void InitList(Seqlist* L) {//顺序表的初始化
	//创建一个空的顺序表,设置元素为没有-1
	L->last = -1;
}

<2>顺序表是否为空

int  ListEmpty(Seqlist* L) {
	//顺序表为空的标志是L.last是否为-1
	if (L->last == -1) {
		return 1;
	}
	else
		return 0;
}

<3>求顺序表长度

int ListLength(Seqlist* L) {//求顺序表的长度
	return (L->last + 1);
}

<4>按内容查找

int ContentElem(Seqlist* L, Datatype x) {//按内容查找顺序表,查找与给定元素相等的元素,如果查找成功返回序号
	for (int i = 0; i <= L->last; i++) {
		if (L->list[i] == x) {//如果相等返回序号
			return i;
		}
	}
	return -1;

}

<5>按下标插入

int InsertList(Seqlist* L, int d, Datatype x) {//顺序表插入操作,参数为顺序表list和插入的位置和插入的数据
	if (L->last == Maxsize - 1) {
		cout << "表满,插入失败" << endl;
		return -1;
	}
	if (d < 0 || d >= L->last + 2) {
		cout << "插入位置非法" << endl;
		return -1;
	}

	for (int i = L->last; i >= d; i--) {//将位置d后面的元素全部后移
		L->list[i + 1] = L->list[i];
	}
	L->list[d] = x;//将元素插入到d位置
	L->last++;//表的元素+1
	return 1;
}

<6>按下标删除元素

int DeleteList(Seqlist* L, int d, Datatype* e) {//删除下标是d的数据,用*e保存被删除的元素

	if (d<0 || d>(L->last)) {
		cout << "删除位置非法" << endl;
		return -1;
	}
	for (int i = d; i < (L->last); i++) {

		L->list[i] = L->list[i + 1];
	}
	L->last--;//表元素-1
	*e = L->list[d];
	return 1;
}

<7>打印链表数据

void show(Seqlist* L) {//打印出顺序表的数据
	for (int i = 0; i <= L->last; i++) {
		cout << "下标" << i << ":" << L->list[i] << endl;
	}
}

<8>移动函数,使链表所有比基准小的数在基准前,比基准大的数在基准后

}
void move(Seqlist* L, Datatype n) {//n基准的数
	Datatype y;//存下被换的值
	for (int i = 0; i < 8; i++) {
		if (L->list[i] < n) {//如果比之小,交换

			y = L->list[i]; //存下被移动的数
			for (int j = i-1; j >= 0; j--) {//移动小于基准的数
				L->list[j + 1] = L->list[j];
			}
			L->list[0] = y;//将被移动数放在0位

		}
	}
}

二、完整代码

注释讲解都在代码里了哦
#include<iostream>
#define Maxsize 100//设置数组最大为100
using namespace std;
/*
顺序表的操作
*/
typedef int Datatype;//给char别称取名为Datatype
typedef struct {
	Datatype list[Maxsize];
	int last;//存储数据元素,顺序表中最后一个数据在数组中的位置
}Seqlist;//定义顺序表
/*
将比a1小的值放a1前面,比a1大的值放后面
*/
int main() {
	Seqlist L;
	void InitList(Seqlist*);
	void show(Seqlist*);
	void move(Seqlist*, Datatype);
	int InsertList(Seqlist*, int, Datatype);
	int DeleteList(Seqlist*, int, Datatype*);


	InitList(&L);
	InsertList(&L, 0, 25);
	InsertList(&L, 1, 30);
	InsertList(&L, 2, 20);
	InsertList(&L, 3, 60);
	InsertList(&L, 4, 10);
	InsertList(&L, 5, 35);
	InsertList(&L, 6, 15);
	InsertList(&L, 7, 70);
	show(&L);
	move(&L, 25);
	show(&L);
	cout << "              " << endl;

	int b = 1;
	int* A = &b;

	for (int i = 1, wei = 0; i < 8; i++) {
		if (L.list[i] < L.list[wei]) {
			InsertList(&L, wei, L.list[i]);
			++wei;
			DeleteList(&L, i + 1, A);
		}
	}

	show(&L);



	return 0;
}

void InitList(Seqlist* L) {//顺序表的初始化
	//创建一个空的顺序表,设置元素为没有-1
	L->last = -1;

}

int  ListEmpty(Seqlist* L) {
	//顺序表为空的标志是L.last是否为-1
	if (L->last == -1) {
		return 1;
	}
	else
		return 0;

}
int ListLength(Seqlist* L) {//求顺序表的长度
	return (L->last + 1);

}
int getElem(Seqlist* L, int num, Datatype* e) {//按序号查找元素
	if (num<-1 || num > L->last + 1) {//如果num<-1 或者是元素没num大 就查找失败
		return -1;
	}
	else
		*e = L->list[num];//将查找的值赋值给e
	return 1;
}

int ContentElem(Seqlist* L, Datatype x) {//按内容查找顺序表,查找与给定元素相等的元素,如果查找成功返回序号
	for (int i = 0; i <= L->last; i++) {
		if (L->list[i] == x) {//如果相等返回序号
			return i;
		}
	}
	return -1;

}
int InsertList(Seqlist* L, int d, Datatype x) {//顺序表插入操作,参数为顺序表list和插入的位置和插入的数据
	if (L->last == Maxsize - 1) {
		cout << "表满,插入失败" << endl;
		return -1;
	}
	if (d < 0 || d >= L->last + 2) {
		cout << "插入位置非法" << endl;
		return -1;
	}

	for (int i = L->last; i >= d; i--) {//将位置d后面的元素全部后移
		L->list[i + 1] = L->list[i];
	}
	L->list[d] = x;//将元素插入到d位置
	L->last++;//表的元素+1
	return 1;
}
int DeleteList(Seqlist* L, int d, Datatype* e) {//删除下标是d的数据,用*e保存被删除的元素

	if (d<0 || d>(L->last)) {
		cout << "删除位置非法" << endl;
		return -1;
	}
	for (int i = d; i < (L->last); i++) {

		L->list[i] = L->list[i + 1];
	}
	L->last--;//表元素-1
	*e = L->list[d];
	return 1;
}
void show(Seqlist* L) {//打印出顺序表的数据
	for (int i = 0; i <= L->last; i++) {
		cout << "下标" << i << ":" << L->list[i] << endl;
	}
}
void move(Seqlist* L, Datatype n) {//n基准的数
	Datatype y;//存下被换的值
	for (int i = 0; i < 8; i++) {
		if (L->list[i] < n) {//如果比之小,交换

			y = L->list[i]; //存下被移动的数
			for (int j = i-1; j >= 0; j--) {//移动小于基准的数
				L->list[j + 1] = L->list[j];
			}
			L->list[0] = y;//将被移动数放在0位

		}
	}
}

二、代码运行结果展示

在这里插入图片描述

总结

本贴用与自己复习与他人借鉴 代码都是博主自己写的,如果对你有用的话,点个

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值