刪除順序表中最小值的元素並用最後一個元素填補

問題描述:從順序表中刪除具備最小值的元素(假設惟一)並由函數放回被刪元素的值。空出的位置由最後一個元素填補,若順序表爲空,則顯示出錯信息並退出運行。算法

算法基本設計思想:搜索整個順序表,查找最小值元素並記住其位置,搜索結束後用最後一個元素填補空出的原最小值得位置。函數

代碼及結果測試

【注】引用的函數是在  "線性表的順序表示和實現.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;
}

 

相關文章
相關標籤/搜索