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

2021年6月17日 1点热度 0条评论 来源: xulu95


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

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


实现该功能的代码

 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]);
	}
}



运行结果:



    原文作者:xulu95
    原文地址: https://blog.csdn.net/xulu95/article/details/75115885
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。