白俊10828号です.

1907 ワード

白準10828号は資料構造の基礎の一つであるスタックに関する問題である.
データ構造スタックは、基本的にFILA、LIFAの構造を有する.つまり、先に入った資料は後で出て、後に入った資料は先に出ます.
図に示すように、

資料1は最初に入った資料で、資料2はその後入った資料です.その後、順番に資料を取り出し、資料2(後で入った資料)が出てくると、資料1(先に入った資料)が出てきます.
この問題では、5つのコマンドがあり、各コマンド
push:スタックに数字を入れます.
pop:スタック内の数値を削除し、数値を出力します.
size:スタック内部の数を出力します.
Empty:スタックが空で出力されているかどうかを確認します.空の場合は1、空でない場合は0を出力します.
トップ:スタックの上部数値を出力します.stackが空の場合、-1が出力されます.
意味がある.
stackの基本構造とコマンドの使用方法を理解すれば、コードは簡単に作成できます.
#include <stdio.h>
#include <string.h>
#define MAX 10000

int stack[MAX];
int top = -1;

void push(int);
int pop();

int main(void) {
	int num;
	scanf("%d", &num);
	char order[6]; int input_num;
	for (int i = 0; i < num; i++) {
		scanf("%s", order);
		if (strcmp(order, "push") == 0) {
			scanf("%d", &input_num);
			push(input_num);
		}
		else if (strcmp(order, "pop") == 0) {
			printf("%d\n", pop());
		}
		else if (strcmp(order, "size") == 0) {
			printf("%d\n", top + 1);
		}
		else if (strcmp(order, "empty") == 0) {
			if (top == -1) {
				printf("%d\n", 1);
			}
			else {
				printf("%d\n", 0);
			}
		}
		else if (strcmp(order, "top") == 0) {
			if (top == -1) {
				printf("%d\n", -1);
			}
			else {
				printf("%d\n", stack[top]);
			}
		}
	}
}
void push(int a) {
	if (top < MAX) {
		stack[++top] = a;
	}
}
int pop() {
	if (top > -1) {
		return stack[top--];
	}
	else {
		return -1;
	}
}