์คํ (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๋ฐฉ์์ด ์ฌ์ฉ๋์ด ์ธํฐํ์ด์ค ์ ํ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋์ด์๋ค.
'CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ๋งํฌ๋๋ฆฌ์คํธ (Linked list) (0) | 2024.10.30 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ํ (Queue) (0) | 2024.10.30 |
[์๋ฃ๊ตฌ์กฐ] ๋ฐฐ์ด (Array) (0) | 2024.10.29 |
[์๋ฃ๊ตฌ์กฐ] ์๋ฃ๊ตฌ์กฐ (data structure) (0) | 2024.10.29 |
ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2024.03.22 |