欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

从顺序表中返回最小值元素

程序员文章站 2022-06-08 18:39:05
...


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

算法思想:搜索整个顺序表,查找最小值元素并记住其位置,搜索结束后用最后一个元素填补空出的原最小值元素位置。


实现该功能的代码

 int ListDeletMin_Sq(LIST *list)
{
	if (list->length == 0)
		return false;
	int index = 0;
	int pos = 0;
	int min = list->base[index];
	for (index = 1; index < list->length; index++)
	{
		if (min > list->base[index])
		{
             min = list->base[index];
			 pos = index;
		}
			
	}
	list->base[pos] = list->base[list->length - 1];
	return min;
}


完整的C程序代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define N 8
typedef struct
{
	int * base;
	int length;
	int listsize;
}LIST;

void Init_LIST(LIST* list)
{
	list->listsize = 100;
	list->base = (int*)malloc(list->listsize*sizeof(int));
	list->length = 0;
}


 int ListDeletMin_Sq(LIST *list)
{
	if (list->length == 0)
		return false;
	int index = 0;
	int pos = 0;
	int min = list->base[index];
	for (index = 1; index < list->length; index++)
	{
		if (min > list->base[index])
		{
             min = list->base[index];
			 pos = index;
		}
			
	}
	list->base[pos] = list->base[list->length - 1];
	return min;
}

int main()
{
	LIST mylist;
	Init_LIST(&mylist);

	printf("请输入mylist里数据:\n");
	for (int i = 0; i < N; i++)
	{
         scanf("%d", &mylist.base[i]);
		 mylist.length++;
	}
		
	int min=ListDeletMin_Sq(&mylist);  //注意如何接收函数返回值
	printf("顺序表里的最小值元素为:%d\n", min);
	printf("请输出mylist里数据:\n");
	for (int i = 0; i < N; i++)
	{
		printf("%d ", mylist.base[i]);
	}
}



运行结果:

从顺序表中返回最小值元素