이전 stack 포스트
stack
stack은 LIFO(Last in First Out) 형식을 가지고 있는 데이터 저장 방식입니다.
stack은 STL(=Standard Template Library)로 사용하는 데
있어서도 정해진 함수가 포함되어 있습니다.
이번 포스트에서는 stack에서 사용하는
push, top, pop 함수에 대해서 이야기를 나눠볼까 합니다.
stack을 하기 위해서는 #include <stack>을 통해서
라이브러리에서 stack을 사용할 것이라는 걸 컴퓨터에게 알려주어야 합니다.
그 다음으로 stack <datatype> name;으로
어떤 이름을 가지고 어떤 데이터 타입의 스택을 사용할 것인지에 대해서 선언해주어야 합니다.
// whoIsHoo
// C++에 빠지다
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int> hooStack;
for (int i = 0; i < 10; i++)
{
hooStack.push(i);
}
cout << hooStack.top() << endl;
hooStack.pop();
cout << hooStack.top() << endl;
return 0;
}
9
8
hooStack.push()
Time Complexity : O(1)
(여기서 hooStack은 제가 임의로 지정한 스택의 이름이니 참고해주시면 감사하겠습니다.)
Stack에서 push란 스택이란 데이터 저장 공간에 데이터를 입력하는 함수라고 생각하시면 됩니다.
push라는 단어를 살펴보면 "밀다" "넣다" 라는 의미가 있듯이
stack에서 push는 데이터를 밀어서 넣다고 생각하시면 쉽게 이해가 된답니다.
위의 코드에서도 for loop 안에 hooStack.push(i)가 있는데,
0부터 10이라는 데이터 값을 넣어주고 있습니다.
따라서 hooStack.push(i);가 이루어지고 난다면 hooStack에 10개의 데이터 값이 저장되는 것이죠.
top
Time Complexity : O(1)
Stack에서 top은 제일 마지막에 저장되었던 데이터를 의미합니다.
top이라는 단어를 사전에 살펴보면 "꼭대기", "위" 라는 의미를 가지고 있는데,
LIFO(=Last in First Out)이라는 저장 방식을 가진 stack은 마지막에 넣은 데이터가
제일 꼭대기에 있다고 생각하시면 됩니다.
따라서 hooStack.top()을 한다면
마지막 데이터 저장된 데이터 값이 무엇인지 보여주는 함수라고 보시면 됩니다.
Therefore,
for loop 다음의 첫번째 hooStack.top(); 에서는 9가 나오고
마지막 데이터 값을 삭제하는 pop 함수 다음에 있는 두 번째 hooStack.top();은 8이 나옵니다.
형 top이 제일 큰 숫자로 정렬까지 해주는 거야?
아닙니다.
top은 마지막에 저장되어 있는 값만 산출되는 함수입니다.
예를 들어서
// whoIsHoo
// C++에 빠지다
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int> hooStack;
hooStack.push(10);
hooStack.push(5);
cout << hooStack.top() << endl;
hooStack.pop();
cout << hooStack.top() << endl;
return 0;
}
5
10
for loop을 따로 사용하지 않고 5와 10 단 두개의 데이터만 저장할 경우,
10을 먼저 저장하고 마지막으로 push 함수를 사용하여 5를 저장한 것을 알 수 있습니다.
따라서 마지막에 저장한 5가 첫번째 hooStack.top()에서 산출되고
pop 함수로 5가 사라진 상황에서는 10이 처음이자 마지막 값이기 때문에
두 번째 hooStack.top()에서는 10이 나오게 됩니다.
pop
Time Complexity : O(1)
stack에서 pop 함수는 제일 위에 있는(=top) 데이터 값(=element)을 없애주는 역할을 합니다.
pop이라고 한다면 팝하고 사라지는 느낌이 나는데요.
유리병에 있는 병뚜껑을 딸때 나는 소리가 미국에서는 pop이라고 한답니다.
따라서 pop하고 사라지는 모습을 stack에서의 pop 함수라고 생각하시면 이해하기 쉬워지죠.
hooStack.top() 사이에 hooStack.pop()이 존재하면서
제일 마지막에 저장된 데이터 값 또는 원소 값이 달라지게 됩니다.
'C and C++' 카테고리의 다른 글
[C++] 반복문: For Loop(For문) (0) | 2022.04.16 |
---|---|
stack functions(stack.empty(), stack.size()) (0) | 2020.05.03 |
[C++] Queue(큐)란? (0) | 2020.05.02 |
Stack(스택)이란? (0) | 2020.04.30 |
heap sort(힙 정렬) Full Binary Trees vs Complete Binary Trees (0) | 2020.04.29 |
댓글