首页 > 技术文章 > 线性表练习题1

zhezh 2014-03-12 10:11 原文

题目描述:

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


解题思路:

搜索整个线性表,查找最小值元素的位置,并记录该位置,然后用最后一个元素的值将其覆盖,并返回最小值。


程序代码:

#include<iostream>
using namespace std;
typedef int ElemType;
struct sqList
{
	int length;
	int *data;		
};
bool Del_Min(sqList &L,ElemType &value)
{
	//删除顺序表L中最小值元素节点,并通过引用型参数value返回值
	//如果删除成功,返回true;否则,返回false
	if(L.length == 0)return false;//表空,终止操作 
	value = L.data[0];
	int 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--;
	for(int i=0;i<L.length;i++)cout<<L.data[i]<<" ";
	return true; 
}
int main()
{
	int value;
	sqList L;
	L.length = 10;
	int a[10]={12,10,9,8,7,-3,1,2,4,5};
	L.data = a; 
	Del_Min(L,value);
	cout<<endl;
	cout<<"min:"<<value<<endl;
} 

运行结果:

12 10 9 8 7 5 1 2 4
min:-3


推荐阅读