c++单链表里查找最小值和次小值函数

本文介绍了一个简单的算法,用于在一个整型单链表中找出最小值和次小值。通过两次遍历链表,分别找到这两个值,并在最后输出结果。

2.3设计一个算法完成在n个整型数据中找出最小值和次小值的功能

就是下面这个函数:

void find_min(Link_List &head)//查找单链表里的最小值和次小值
{
	//min记录最小值,2047483647是int里的最大值,second_min次小值
	int min =2147483647,second_min=min-1;
	Link_List PTemp = head->next;//指针指向第一个结点
	while (PTemp)//第一次遍历,找出最小值
	{
		if (PTemp ->data<= min)
		{
			min = PTemp->data;
		}
		PTemp = PTemp->next;//指针指向下一个结点;
	}
	PTemp = head->next;//指针指向第一个结点
	while (PTemp)//第二次遍历找出次小值
	{
		//次小值必须大于最小值且在除最小值之外的元素里是最小
		if (PTemp->data>min&&PTemp->data<second_min)
		{
			second_min = PTemp->data;
		}
		PTemp = PTemp->next;//指针指向下一个结点;
	}
	cout << "最小值:" << min << endl;//输出
	cout<<"次小值:"<< second_min;
}


在链表里进行功能示范:

#include "stdafx.h"
#include<iostream>
using namespace std;
typedef struct node
{
	int data;
	struct node *next;
}SingleLinkNode, *Link_List;//链表结点,链表头指针
void  CreatList(Link_List &head, int a[], int n)	//1尾插法,CreatList(链表头指针,数组地址,结点个数)
{
	Link_List PNew, PEnd;//PEnd末尾指针,PNew新建结点的指针
	int i;
	head = new SingleLinkNode;	//创建头结点
	PEnd = head;					//PEnd始终指向尾结点,开始时指向头结点
	for (i = 0; i<n; i++)
	{
		PNew = new SingleLinkNode;	//创建新结点
		PNew->data = a[i];			//新建结点被赋值
		PEnd->next = PNew;			//将*PNew插入*PEnd之后
		PEnd = PNew;
	}
	PEnd->next = NULL;			//PEnd末尾指针始终指向NULL
}
void InitalList(Link_List &head)					//2.初始化单链表
{
	head = new SingleLinkNode;	//创建头结点*head
	head->next = NULL;
}
void find_min(Link_List &head)//查找单链表里的最小值和次小值
{
	//min记录最小值,2047483647是int里的最大值,second_min次小值
	int min =2147483647,second_min=min-1;
	Link_List PTemp = head->next;//指针指向第一个结点
	while (PTemp)//第一次遍历,找出最小值
	{
		if (PTemp ->data<= min)
		{
			min = PTemp->data;
		}
		PTemp = PTemp->next;//指针指向下一个结点;
	}
	PTemp = head->next;//指针指向第一个结点
	while (PTemp)//第二次遍历找出次小值
	{
		//次小值必须大于最小值且在除最小值之外的元素里是最小
		if (PTemp->data>min&&PTemp->data<second_min)
		{
			second_min = PTemp->data;
		}
		PTemp = PTemp->next;//指针指向下一个结点;
	}
	cout << "最小值:" << min << endl;//输出
	cout<<"次小值:"<< second_min;
}
int _tmain(int argc, _TCHAR* argv[])
{
	Link_List Head;
	int a[5] = { 1,0,3,4,5 };
	CreatList(Head, a, 5);    //CreatList(链表头指针,数组地址,结点个数)  
	find_min(Head);
	cout << endl;
	system("pause");
	return 0;
}

运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值