《算法笔记》学习日记——6.5 queue的常见用法详解

6.5 queue的常见用法详解

Codeup Contest ID:100000600

问题 A: C语言-数字交换

题目描述
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出10个数。
输入
10个整数
输出
整理后的十个数,每个数后跟一个空格(注意最后一个数后也有空格)
样例输入

2 1 3 4 5 6 7 8 10 9

样例输出

1 2 3 4 5 6 7 8 9 10 

思路
这题我用了数组来做(用数组非常简单,队列实现要复杂很多,想看队列实现这一题的可以看这篇文章:Codeup 100000606 问题 A: C语言-数字交换 (只用队列实现,不用数组)),直接把读入的数存在一个数组里,然后用<algorithm>自带的swap对第一个数和最小的数交换,对最后一个数和最大的数交换(这里第一步交换完之后要重新更新一下最大数的下标,因为可能第一步交换的第一个数就是最大数,所以会发生改变)。
在这里顺便推家大家一个东西:C++ Reference,这里面不管是C的标准库函数还是C++的标准库函数都写得非常详细,比菜鸟教程上的完整很多,而且也有C++98和C++11的对比(赞)。
代码

#include<cstdio>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
int q[10]={0};
int main(){
	while(scanf("%d", &q[0]) != EOF){
		int max, min, maxi, mini;
		max = min = q[0];//记录最大值和最小值 
		maxi = mini = 0;//记录对应的下标 
		for(int i=1;i<10;i++){
			scanf("%d", &q[i]);
			if(q[i]>max){
				max = q[i];
				maxi = i;
			}
			if(q[i]<min){
				min = q[i];
				mini = i;
			}
		}
		swap(q[0], q[mini]);
		mini = 0;
		for(int i=0;i<10;i++){
			if(q[i]==max) maxi = i;//更新maxi的值,防止因第一次交换而产生错误 
		}
		swap(q[9], q[maxi]);
		maxi = 9;
		for(int i=0;i<10;i++){
			if(i==0) printf("%d", q[i]);
			else printf(" %d", q[i]);
		}
		printf("\n");
		memset(q, 0, sizeof(q));
	}
	return 0;
}

小结

通常队列都和栈放在一起讲,因为一个是先进先出,另一个先进后出,我在学数据结构的时候老师其实并没有很深入地讲队列的知识,对于这一块的内容我唯一的印象就是用栈实现后缀表达式或者中缀表达式的计算……

发布了54 篇原创文章 · 获赞 27 · 访问量 4986

猜你喜欢

转载自blog.csdn.net/weixin_42257812/article/details/105311113