Programming/C++

[C++] STACK

100winone 2020. 1. 2. 16:37

STACK 은 기본적으로 LIFO(LAST IN FIRST OUT) 구조로 된 자료구조이다.

LIFO 가 뭐라함은 말 그대로 나중에 들어간 값이 먼저 나오는 형식이다.

 

1. 먼저 <stack> 라이브러리를 쓰지않고 직접 구현한 방식이다.

직접 구현을 할 때에 push와 pop 함수를 따로 만들어 구현한다.

 

/* 라이브러리 없이 STACK 직접 구현*/

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<vector>
#include<algorithm>

using namespace std;
int stack[100], top = -1;

void push(int x) {
	stack[++top] = x;
}
int pop() {
	return stack[top--];
}
int main() {
	int n, k;
	char str[20] = "0123456789ABCDEF";
	scanf("%d %d", &n, &k);
	while (n > 0) {
		push(n % k);
		n /= k;
	}
	while (top != -1) {
		printf("%c", str[pop()]);
	}
	return 0;
}

 

2. #include<stack> 을 헤더에 추가해 사용하는 방법이다.

메소드, 즉 사용할 수 있는 내장함수들만 알고 있다면 훨씬 사용하기 간편할 것이다.

 

/*STACK*/

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<stack>

using namespace std;
int main() {
	int n, k;
	stack<int> s;
	char str[20] = "0123456789ABCDEF";
	scanf("%d %d", &n, &k);
	while (n > 0) {
		s.push(n % k);
		n /= k;
	}
	while (!s.empty()) {
		printf("%c", str[s.top()]);
		s.pop();
	}
	return 0;
}
STACK의 대표적인 멤버
s.pop() 스택의 가장 상단의 값을 삭제
s.push(param) param을 스택에 push
s.empty()

스택이 비어있나 체크

비어있으면 1 , 아니면 0 return

s.top() 스택의 가장 상단의 값을 return 
s.size() 스택의 사이즈 return