0
点赞
收藏
分享

微信扫一扫

顺序表中删除最小值的元素

源码之路 2022-04-27 阅读 51
数据结构
从顺序表中删除最小值的元素(假设唯一)并由函数返回被删元素的值,
空出位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行



#include <iostream>
#define ok 1
#define error 0
#define MaxSize 100

using namespace std;

typedef int ElemType;
typedef int status;

//定义
typedef struct
{
	ElemType *elem;
    int length;	
}SqList ;

//初始化
status InitList(SqList &L)
{
	L.elem = new ElemType[MaxSize];
	if (L.elem == 0)
       return error;
    else
	   int length = 0;
	return ok;	   
} 
 
//创建
status CreatList(SqList &L, int n)           //创建一个长度为n的顺序表 
{
	for (int i = 0; i < n ; i++)              
	    cin >> L.elem[i];
	L.length = n;
	return ok;
}
 
//删除顺序表中最小值元素,并用e返回其值 
/*——————————————————————* 

搜索整个顺序表,查找最小值元素,并记住其位置
搜索结束用最后一个元素填补删除元素 
*——————————————————————-*/
int  DeleteList(SqList &L, ElemType &e)
{   
	if (L.length == 0)                          //表空,错误退出 
	    return error;
	
	e = L.elem[0];                              //假定0号元素最小 
	int pos = 0;                                //查找最小元素时,用pos记录其位置
	for (int i = 1; i < L.length; i++)          //循环寻找最小值元素 
	{
		if (L.elem[i] < e)                      //如果当前元素值比假定0号单元的元素值还小时 
		{ 
			e = L.elem[i];                      //就将当前位置的元素值赋给e 
			pos = i;                            //pos记录当前具有最小值元素的位置 
		}
    } 
    L.elem[pos] = L.elem[L.length - 1];         //空出来得位置由最后一个元素填补 
	L.length--;                                 //删除以后长度减一 
	return e;                                   //此时e即为最小值 
 } 

//输出
status DispList(SqList L)
{
	for (int i = 0; i < L.length; i++)
	    cout << L.elem[i] << ' ';
	return ok;
} 

int main()
{
	int n;
	ElemType e;
	SqList L;
	InitList(L);
	cout << "请输入顺序表长度:"  << endl;
	cin >> n; 
	cout << "请输入顺序表元素:" << endl;
	CreatList(L, n);

	int m = DeleteList(L, e);                   //用m接收要删除得最小值元素 
	cout << "输出最小值元素:" << endl;
	cout << m ;
	cout << endl;
	
	cout << "输出删除最小值后得顺序表元素:" << endl; 
	DispList(L);	
	
	return ok;
}
举报

相关推荐

0 条评论