問題描述:從順序表中刪除具備最小值的元素(假設惟一)並由函數放回被刪元素的值。空出的位置由最後一個元素填補,若順序表爲空,則顯示出錯信息並退出運行。算法
算法基本設計思想:搜索整個順序表,查找最小值元素並記住其位置,搜索結束後用最後一個元素填補空出的原最小值得位置。函數
代碼及結果:測試
【注】引用的函數是在 "線性表的順序表示和實現.cpp"中已經實現了的線性表基本操做,連接以下:https://blog.csdn.net/Dear_Jia/article/details/108297555.net
#include<stdio.h> #include "線性表的順序表示和實現.cpp" bool Del_Min(SqList &L,ElemType &value){ //刪除順序表L中的最小值元素結點,並經過引用參數value返回其值,成功返回true,失敗返回false if(L.length == 0) return false; //表爲空,終止操做並返回 value = L.data[0]; int pos = 0; //使用pos記錄位置,起始假設0號元素值最小 for(int i = 1;i < L.length;i++){ //循環,尋找具備最小值的元素 if(L.data[i] < value){ //value記錄當前具備最小值的元素 value = L.data[i]; pos = i; } } L.data[pos] = L.data[L.length - 1]; //空出的位置由最後一個元素補充 L.length--; return true; //此時,value爲最小值 } int main(){ //測試函數 SqList L; //定義一個順序表 int e,value = 0; bool flag = InitList_Sq(L); if(flag) printf("構造空的順序表成功!\n"); else printf("構造順序表失敗!\n"); printf("依次輸入要往線性表中輸入的元素:"); for(int i = 0;i < 10;i++){ scanf("%d",&e); ListInsert_Sq(L,i+1,e); } printf("順序表中現有的數據爲:"); PrintList(L); //測試刪除最小值函數 if(Del_Min(L,value)){ printf("刪除最小值成功,當前表中元素爲:"); PrintList(L); } else printf("刪除失敗\n"); return 0; }