CS

[์ž๋ฃŒ๊ตฌ์กฐ] ์Šคํƒ (Stack)

moaoh 2024. 10. 29. 21:42

์Šคํƒ (Stack) ์ด๋ž€?

  • ์ˆœ์„œ๊ฐ€ ๋ณด์กด๋˜๋Š” ์„ ํ˜• ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
  • ์Šคํƒ์€ LIFO(Last In, First Out) ๊ตฌ์กฐ๋กœ, ๋งˆ์ง€๋ง‰์— ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ค๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์•ผ๊ธฐํ•œ๋‹ค.
  • ์Œ“์ธ ์ ‘์‹œ๋‚˜ ํ•˜๋…ธ์ด ํƒ‘์„ ์˜ˆ์‹œ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์žฅ๋‹จ์ 

์žฅ์ 

  • ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ O(1) ์‹œ๊ฐ„์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค.

๋‹จ์ 

  • ์ค‘๊ฐ„๊ณผ ๋งˆ์ง€๋ง‰์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผํ•˜๋ ค๊ณ ํ•˜๋ฉด ๋น„ํšจ์œจ์ ์ด๋‹ค.

๊ตฌํ˜„

#include <stack> ์‚ฌ์šฉ

#include <iostream>
#include <stack>

using namespace std;

int main(void) {

	stack<int> s;

	s.push(1);
	s.push(2);
	s.push(3);
	cout << s.top() << "\n"; // output : 3
	s.pop();
	cout << s.top() << "\n"; // output : 2

	if (!s.empty()) {
		cout << "not empty" << "\n"; // output : not empty
	}
	if (s.size()) {
		cout << "size : " << s.size() << "\n"; // output : size : 2
	}

	return (0);
}

 

์ •์ ํ• ๋‹น ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„

#ifndef CUSTOMSTACK_HPP
#define CUSTOMSTACK_HPP

#define MAX_SIZE 10000 // ์‹ค์ œ๋กœ๋Š” ๋™์ 

#include <iostream>

template <typename T>
class CustomStack 
{
	private:
		T c[MAX_SIZE];
		int _top;
	public:
		CustomStack() : _top(-1) {};
		~CustomStack() {};

		void push(T data) {
			c[_top + 1] = data;
			_top++;
		}
		T pop() {
			T temp = c[_top];
			_top--;
			return temp;
		}
		size_t size() const {
			return _top + 1;
		}
		bool empty() const {
			if (size() == 0) return true;
			else return false;
		}
		T top() const {
			T temp = c[_top];
			return temp;
		}
};

#endif
  • ์‹ค์ œ stack์— ๊ฒฝ์šฐ์—๋Š” ๋™์ ์œผ๋กœ ํฌ๊ธฐ๋ฒ”์œ„๊ฐ€ ์ปค๋„ ๋™์ž‘์„ ํ•˜๊ฒ ์ง€๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •์ ํ• ๋‹น ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•œ ๊ตฌํ˜„์€ ์œ„์™€ ๊ฐ™๋‹ค.
  • ์Šคํƒ(Stack)์— ๊ฒฝ์šฐ ๋ฉ”์„œ๋“œ๋กœ LIFO(Last In, First Out) ์— ํ•ด๋‹น๋˜๋Š” ์„ ์ž…ํ›„์ถœ์— ํ•ด๋‹น๋˜๋Š” ๋ฉ”์„œ๋“œ๋งŒ ์กด์žฌํ•œ๋‹ค.
  • stack๊ณผ queue์˜ ์‹ค์ œ ๊ตฌํ˜„์—์„œ๋„ deque๋ฐฉ์‹์ด ์‚ฌ์šฉ๋˜์–ด ์ธํ„ฐํŽ˜์ด์Šค ์ œํ•œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค.
๋Œ“๊ธ€์ˆ˜0