[자료구조] 스택( Stack )

업데이트:

Goal

Stack의 기본개념을 이해한다.
Stack의 구조를 확인한다.
Stack을 C/C++ 로 구현한다.







스택(Stack)의 개념

  • 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 LIFO(Last In First Out) 형식의 자료구조이다.







스택(Stack)의 연산

  • push(Data) : Data 하나를 스택에 삽입한다.
  • pop : 스택에 있는 Data 하나를 제거한다.
  • size : 스택에 들어있는 정수의 개수를 출력한다.
  • empty : 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top : 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.







스택(Stack)의 구현

enter image description here

스택은 연결리스트로 구현할 수 있으며 LIFO(Last In First Out) 를 따른다.





스택(Stack)의 생성자/초기화/함수들

// <stack> 헤더 추가
#include <stack>


// 비어있는 int형 stack 생성
stack<int> s1;


s1.push(n)	// n을 스택에 넣는 연산

s1.pop()	// 스택에서 제일 위에 있는 정수를 제거.
			// 스택에 정수가 없는 경우 -1을 출력
			
s1.empty()	// 스택이 비어있으면 1, 아니면 0 출력

s1.size()	// 스택에 들어있는 정수의 개수 출력

s1.top()	// 스택에 제일 위에 있는 정수 출력







스택(Stack) 코드 구현 [ C++ / STL ]

#include <iostream>
#include <stack>
#include <string>

using namespace std;
using std::cout;
using std::endl;

int main() { 
	int num;
	cin >> num;

	stack<int> st;
	string str;

	for (int i = 0; i < num; i++) {
		cin >> str;
		if (str == "push") {
			int num;
			cin >> num;
			st.push(num);
		}
		else if (str == "pop") {
			if (!st.empty()) {
				cout << st.top() << endl;
				st.pop();
			}
			else cout << "-1" << endl;
		}
		else if (str == "size") {
			cout << st.size() << endl;
		}
		else if (str == "empty") {
			if (st.empty()) cout << "1" << endl;
			else cout << "0" << endl;
		}
		else if (str == "top") {
			if (st.empty()) cout << "-1" << endl;
			else cout << st.top() << endl;
		}
	}
}

댓글남기기