从顺序表表中删除具有最小值的元素(假设不唯一)并由函数返回被删元素值

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

//顺序表定义及初始化
#define _CRT_SECURE_NO_WARNINGS
#include
#define MaxSize 10//定义最大长度

int InitArr[10] = { 3,9,2,5,4,8,6,1,7,10 };

typedef struct {
	int data[MaxSize];//用静态的数据存放数据元素
	int length;//顺序表当前长度
}Sqlist;//顺序表的类型定义

//初始化一个顺序表
void InitList(Sqlist* L)
{
	for (int i = 0;i < MaxSize;i++)
	{
		L->data[i] = InitArr[i];//将所有数据元素设置为默认初始值
	}
	L->length = 10;//顺序表初始长度为0
}
//从顺序表表中删除具有最小值的元素(假设不唯一),并由函数返回被删元素值
//空出的位置由最后一个元素填补,若顺序表为空,则显示出错误信息并退出运行

int del_min(Sqlist* L) {
	int i = 0;
	int min = (*L).data[i];//标记最小元素
	int index = 0;//标记最小元素下标

	//找最小元素位置
	for (i = 0;i < (*L).length;i++) {
		if ((*L).data[i] < min) {
			min = (*L).data[i];
			index = i;
		}
	}
	
	//删最小元素——即把最小元素后面的元素前移,length-1
	for (i = index;i < (*L).length-1;i++) {
		(*L).data[i] = (*L).data[i + 1];
	}
	(*L).length--;
	return min;
}
int main() 
{
	Sqlist L;
	InitList(&L);//初始化一个顺序表:3,9,2,5,4,8,6,1,7,10
	printf("初始顺序表为:");
	print(&L);

	printf("\n");
	int min = del_min(&L);
	printf("进行一次最小元素的删除,被删元素为:%d",min);
	printf("删除后顺序表为:");
	print(&L);

	printf("\n");
	min = del_min(&L);
	printf("进行两次最小元素的删除,被删元素为:%d", min);
	printf("删除后顺序表为:");
	print(&L);
	return 0;
}

从顺序表表中删除具有最小值的元素(假设不唯一)并由函数返回被删元素值_第1张图片

你可能感兴趣的:(数据结构代码汇总,c语言,删除顺序表最小元素,数据结构,顺序表)