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;
}
运行结果: