「アルゴリズムノート」学習日記6.5キューの一般的な使用法の説明

6.5キューの一般的な使用法の詳細な説明

コードアップコンテストID:100000600

質問A:C言語とデジタルの交換

タイトル説明
10個の整数を入力し、最小の数値を最初の数値と入れ替え、最大の数値を最後の数値と入れ替えます。3つの関数を記述します:①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 100 000 606発行A:C言語-デジタル交換は(キューだけで実装、配列なし))、読み取りを配列に直接格納し、<algorithm>に付属のスワップを使用して、最初の数値を最小の数値に、最後の数値を最大の数値(ここでは最初に)に交換しますステップ交換が完了した後、最大数の添え字を再度更新する必要があります。これは、最初のステップで交換される最初の数が最大数なので、変更されるためです)
ここで、ところで、誰もが1つのことを推進しています:C ++リファレンス、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;
}

まとめ

通常、キューはスタックと一緒に配置されます。1つは先入れ先出しで、もう1つは先入れ先出しです。私がデータ構造を学習しているとき、先生はキューの知識について実際には話しませんでした。スタックを使用してサフィックス式またはインフィックス式の計算を実現することです...

公開された54元の記事 ウォン称賛27 ビュー4986

おすすめ

転載: blog.csdn.net/weixin_42257812/article/details/105311113