1. 程式人生 > >從順序表中返回最小值元素

從順序表中返回最小值元素

題目:從順序表中刪除具有最小值的元素(假設唯一)並由函式返回被刪元素的值。空出的位置由最後一個元素填補。若順序表為空顯示出錯資訊並退出執行。

演算法思想:搜尋整個順序表,查詢最小值元素並記住其位置,搜尋結束後用最後一個元素填補空出的原最小值元素位置。

實現該功能的程式碼

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



執行結果: