들어가며
과외를 시작했다.
편입을 준비하는 학생인데 내가 사실 컴퓨터 분야 과외는 처음이고
편입 과외는 더더욱 처음이라, 뭐부터 시작해야할지 잘 모르겠다.
과외를 빌미삼아 자료구조랑 알고리즘을 더 열심히 정리하는 기회로 삼아야겠다.
오늘은 자료구조 중에 가장 기초라할 수 있는 스택(stack)에 대해 포스팅 해보고자 한다.
스택을 공부하면서 나에게 가장 어려웠던 점은, 이 스택이라는 용어를 너무 여기저기 쓴다는 점이었다.
자료구조에도 나오고 프로세스 구조에도 나오고 심지어는 C++ STL에서도 등장한다.
여기서 주목할 점은 스택은 LIFO의 방식으로 데이터를 처리하는 자료구조인데
이러한 자료구조를 따르는 모든 아키텍처에 스택이라는 이름을 붙여놨다는 점이다.
이 점만 기억하면 스택은 정말 쉬운 개념이다.
개념 및 특징
- LIFO(Last In First Out)으로 데이터를 저장/처리한다.
- stack pointer 또는 top은 스택의 마지막 데이터가 저장된 위치를 가리킨다.
소스코드(C++)
#include <iostream>
using namespace std;
#define MAX 100
template <typename T>
class Stack {
T s[MAX];
T ptr;
public:
Stack(void)
:ptr(-1) {}
T top(void) const {
return s[ptr];
}
bool empty(void) const {
return ptr==-1;
}
size_t size(void) const {
return ptr+1;
}
void push(T v) {
if(ptr==MAX) {
cerr << "ERROR: stack is full" << endl;
return ;
}
s[++ptr] = v;
}
T pop(void) {
if(ptr==-1) {
cerr << "ERROR: stack is empty" << endl;
return -1;
}
return s[ptr--];
}
const T operator[] (size_t i) const {
return s[i];
}
T operator[] (size_t i) {
return s[i];
}
friend ostream& operator << (ostream& os, const Stack& st) {
for(int i=0;i<st.size();++i)
os << st[i] << ' ';
return os;
}
};
int main(void)
{
Stack<int> st;
st.push(1);
st.push(2);
cout << st << endl;
st.pop();
cout << st << endl;
st.pop();
cout << st << endl;
st.pop();
cout << st << endl;
st.push(3);
cout << st << endl;
cout << st.top() << endl;
st.push(5);
cout << st.top() << endl;
cout << st.size() << endl;
return 0;
}
'STUDY > 자료구조' 카테고리의 다른 글
스택 (Stack) (0) | 2022.09.28 |
---|---|
이중 연결 리스트 (Double Linked List) (0) | 2022.09.28 |
원형 연결 리스트 (Circular Linked List) (0) | 2022.09.28 |
단일 연결 리스트 (Single Linked List) (0) | 2022.09.28 |
01) 힙(Heap)의 개념 및 구현 (0) | 2019.12.10 |