從順序表中返回最小值元素
阿新 • • 發佈:2019-02-08
題目:從順序表中刪除具有最小值的元素(假設唯一)並由函式返回被刪元素的值。空出的位置由最後一個元素填補。若順序表為空顯示出錯資訊並退出執行。
演算法思想:搜尋整個順序表,查詢最小值元素並記住其位置,搜尋結束後用最後一個元素填補空出的原最小值元素位置。
實現該功能的程式碼:
完整的C程式程式碼: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; }
#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]); } }
執行結果: