顺序表删除相关题(一)-----考研数据结构题笔记

这篇博客介绍了如何在顺序表中删除具有最小值的元素,并用最后一个元素填充空位。算法通过遍历顺序表找到最小值,然后进行删除操作。文章提供了完整的C++代码实现,包括初始化、删除和打印顺序表的功能,并在主函数中进行了测试。
摘要由CSDN通过智能技术生成

⌚️ 数据结构考研算法笔记(一)

祝22考研人成功上岸,祝愿自己23考研成功顺利上岸,加油加油加油!!!

⛵️ 题:

从顺序表中删除具有最小值的元素(假设唯一),并由函数返回被删除的元素值,空出的位置由最后一个元素填补,若顺序表为空,则显示错误信息并退出运行。

🤔 算法思想

使用for循环找出顺序表中最小的值,并赋值到一个变量min,记录位置j,将最后一个元素的值赋值到jL.data[j] = L.data[L.length]; L.length--;

❤️ 核心代码
//删除最小值,最后一个元素代替位置,并返回min最小值
int DeleteMinList(SeqList& L);
int DeleteMinList(SeqList& L) {
	if (L.length == 0) {
		cout << "the list is empty" << endl;
		return 9999;	//设置特殊值进行判断
	}
	int min = L.data[1];
	int j = 1;
	for (int i = 2; i <= L.length; i++){	//循环顺序表
		if (L.data[i] < min){	//判断
			min = L.data[i];	//记录最小值
			j = i;	//记录最小值的位置
		}
	}
	L.data[j] = L.data[L.length];	//将最后一个元素赋值到相应的位置
	L.length--;	//长度减1
	return min;
}
⌛️ 使用顺序表测试
#include <iostream>
using namespace std;
#define MaxSize 100

typedef int ElemType;
typedef struct {
	ElemType* data;
	int length;
	int InitSize;
}SeqList;

//初始化顺序表赋值
bool InitList(SeqList& L, int n);
bool InitList(SeqList& L, int n) {
	L.data = (ElemType*)malloc(sizeof(ElemType) * MaxSize);
	if (!L.data) return false;
	L.length = 0;	//初始化长度为0
	L.InitSize = MaxSize;	//初始化顺序表大小
	int m = 0;
	//L.data[0] 备用或者不用
	for (int i = 1; i <= n; i++){
		cin >> m;
		L.data[i] = m;
		L.length++;
	}
	return true;
}

//删除最小值,最后一个元素代替位置,并返回min最小值
int DeleteMinList(SeqList& L);
int DeleteMinList(SeqList& L) {
	if (L.length == 0) {
		cout << "the list is empty" << endl;
		return 9999;	//设置特殊值进行判断
	}
	int min = L.data[1];
	int j = 1;
	for (int i = 2; i <= L.length; i++){	//循环顺序表
		if (L.data[i] < min){	//判断
			min = L.data[i];	//记录最小值
			j = i;	//记录最小值的位置
		}
	}
	L.data[j] = L.data[L.length];	//将最后一个元素赋值到相应的位置
	L.length--;	//长度减1
	return min;
}

//打印顺序表
bool PrintList(SeqList L);
bool PrintList(SeqList L) {
	if (L.length == 0) return false;	//判空
	for (int i = 1; i <= L.length; i++){	//循环输出顺序表
		if (i != L.length)
			cout << L.data[i] << ",";
		else
			cout << L.data[i] << endl;
	}
	return true;
}


int main(){
	SeqList L;
	int n = 0;
	cin >> n;
	if (!InitList(L, n))
		cout << "initialize is error" << endl;
	int min = DeleteMinList(L);
	if (min != 9999) {
		PrintList(L);
		cout << "min = " << min << endl;
	}
	else{
		cout << "delete is error" << endl;
	}
		
	system("pause");
	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

25!

谢谢,只求点赞哟

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值