스택의 특징 : 후입선출, LIFO (Last-In- First-Out)
* 스택 용어
1) 위치
top : 삽입과 삭제가 일어나는 위치
2) 연산
push : top 위치에 새로운 데이터를 삽입하는 연산
pop : top 위치에 현재 있는 데이터를 삭제하고 확인하는 연산
top : top 위치에 현재 있는 데이터를 단순 확인하는 연산


1) 클래스명
ArrayStack
2) 멤버 변수( - ; private의 접근 권한)
-top : int --> 스택의 top 변수
-data[ ] : int --> 항목을 저장할 배열
3) 멤버 함수
생성자
스택 연산
#include <stack>
stack<int> st;
bool empty() const; //스택이 비어 있는지 확인
ex) st.empty();
size_type size() const; //사이즈 반환(스택의 사이즈, 현재 데이터가 몇 개 들어갔는지)
ex) st.size();
const value_type& top() const; //맨 위에 있는 인자 반환
ex) st.top();
void push(const value_type&val); // 데이터(value)삽입, 데이터를 스택에 넣음
ex) st.push(999); //999를 스택에 삽입
void pop(); //맨 위에 있는 인자 삭제
ex) st.pop(); //** 맨 위에 있는 데이터가 무엇인지 확인하고(top) 삭제하는(pop) 개념
= 먼저 들어온 데이터가 먼저 나가는(=선입선출) 자료구조

* 큐 용어
- enqueue(a) : 데이터 삽입(뒤), 늦게 온 사람은 뒤에 줄 세움
- dequeue() : 데이터 삭제(앞), 먼저 온 사람 처리해줌
= '배열'을 사용하여 큐를 구현

#include <queue>
queue<int> q; //linear queue
bool empty() const; //비어 있으면 true, size()가 0이면 true
size_type size() const; //큐에 저장된 원소 개수 반환
value_type& front(); //첫번째 원소에 접근(데이터를 알아야 삭제할 수 있음!!)
value_type& back(); //마지막 원소에 접근(데이터를 알아야 삽입할 수 있음!!)
void push(const value_type& val); //삽입 연산(데이터를 뒤에 삽입)
void pop(); //삭제 연산(맨 앞에 있는 데이터 삭제, 리턴값이 없는 void 타입)
* 선형 큐의 단점
- '데이터 삽입'을 계속하기 위해선 요소들을 앞으로 이동시켜야 함
- 앞이 맨날 비어서 2차원 배열을 효율적으로 사용할 수 없음
- enqueue(int data) ; 삽입 : 데이터를 큐의 뒷 부분에 삽입
- int data = dequeue( ) ; 삭제 : 큐의 앞 부분에서 데이터 삭제


1) 클래스명
= CircularQueue
2) 멤버 변수
- '#'(protected의 접근 권한) : 상속을 위해 사용, 자식 클래스까지 접근 가능
- int 변수 : front,rear (#front : int, #rear : int)
- int 배열 : 원형큐에 저장할 데이터 (#data[] : int)
3) 멤버 함수- CircularQueue() : 생성자
- enqueue(int item), dequeue() : 삽입, 삭제
- peek() : 원형 큐에서 가장 앞에 있는 값을 확인
- isEmpty(), isFull() : 큐 공백상태, 포화상태 체크
- display() : 큐 내용 표시
= front와 rear 모두 삽입과 삭제가 가능한 큐

#include <deque>
deque<int> del // dequeue
dq.size(); // 원소의 개수 반환
dq.empty(); // dq가 비어 있으면 true 반환
dq.front(); // 첫 번째 원소에 접근
dq.push_front(3); // dq의 첫 번째 원소 앞에 원소 3을 삽입
dq.pop_front(); // dq의 첫 번째 원소를 제거
dq.back(); // 맨 마지막 원소에 접근
dq.push_back(5); // dq의 마지막 원소 뒤에 원소 5를 삽입
dq.pop_back(); // 마지막 원소를 제거