티스토리 뷰
안녕하세요, IT디자이너입니다.
이번에는 컴퓨터의 자료구조 스택(Stack)에 관하여 포스팅하도록 하겠습니다.
- 스택(Stack)이란?
스택은 말 그대로 스택처럼 쌓아올리는 형태의 자료구조를 뜻합니다.
쌓아 올리는 스택(Stakc)은 가장 마지막에 입력된 요소가 가장 먼저 출력됩니다. 이러한 특성의 자료구조를
(Last In First Out) 구조라고 합니다.
- 스택(Stack)의 top이란?
스택은 기본적으로 현재 스택의 위치를 가리키는 top 의 값을 이용하여 스택을 쌓거나 값을 출력합니다.
또한 배열을 이용하여 구현할 수 있으며, top 초기화 값은 -1로 하여 0번째 인덱스 부터 가리킬 수 있도록 구현합니다.
- 스택(Stack)에서 사용하는 함수
- Push() : 스택에 값을 넣는 함수입니다.
- Pop() : 스택의 top 위치에 있는 요소를 출력하는 함수입니다.
- Peek() : 푸쉬의 가장 마지막에 입력된 값 즉, 탑 위치의 값을 확인하는 함수입니다.
- isFull() : 스택이 꽉 찼는지 확인하는 함수입니다.
- isEmpty() : 스택이 현재 비어있는지 확인하는 함수입니다.
- 스택(Stack) 구현
※ 자료구조에서 사용하는 모든 함수의 반환형은 반드시 bool 탑으로 true or false만 반환하도록 하여야합니다.!!!
함수 내에서의 출력하지 않도록 주의해주세요~!!
#include <iostream>
#include <Windows.h>
using namespace std;
#define MAX_STACK 10
int stack[MAX_STACK];
int top = -1;
bool Push(int val); // 스택에 값을 넣는 함수
bool Pop(int *val); // 스택에 값을 출력하는 함수
bool isFull(); // 스택이 꽉 찼는지 확인하는 함수
bool isEmpty(); // 스택이 비었는지 확인하는 함수
bool Peek(int *val); // 스택의 탑 위치를 확인하는 함수
int main(void){
int sel; // 메뉴 입력
int num; // 스택에 값 입력 또는 출력할 때 쓰는 int
while (1) {
cout << "--------스택--------"<< endl;
cout << "1.Push "<< endl;
cout << "2.Pop " << endl;
cout << "3.Peek " << endl;
cout << "4. 나가기"<< endl;
cout << "번호 입력 : ";
cin >> sel;
cout << endl;
switch (sel) {
case 1:
cout << "값을 입력하세요 : ";
cin >> num;
if (Push(num) == false)
cout << "스택이 꽉 찼습니다." << endl;
break;
case 2:
if (Pop(&num) == true)
cout << "Pop() 결과 : " << num << endl;
else
cout << "스택이 비어있습니다. " << endl;
break;
case 3:
if(Peek(&num) == true)
cout<<"Peek() 결과 : "<< num <<endl;
else
cout << "스택이 비어있습니다. " << endl;
break;
};
cout << endl;
if (sel == 4) {// 4번 입력 시 종료
cout << "프로그램을 종료합니다." << endl;
break;
}
}
}
bool Push(int val){
if (isFull() == true) // 스택이 꽉 찼으면 true를 return
return false;
else {
stack[++top] = val;
return true;
}
}
bool Pop(int *val) {
if (isEmpty() == true) // 스택이 비었으면 true를 return
return false;
else {
*val = stack[top--];
return true;
}
}
bool isFull() {
if (top == MAX_STACK - 1) // top은 인덱스이기 때문에 MAX_STACK의 -1 값과 같으면 true를 return
return true;
else
return false;
}
bool isEmpty() {
if (top == -1) // top이 -1이면 return
return true;
else
return false;
}
bool Peek(int *val) {
if (isEmpty() == true) {
return false;
}
else {
*val = stack[top];
return true;
}
}
- 스택(Stack)의 사용처
스택의 특징과 스택 구현방법에 관하여 간단하게 알아보았습니다. 이번에는 스택이 과연 어디에서 쓰이는지 간단하게 알아보도록 하겠습니다.
- C/C++의 main() 함수안에서 사용되는 지역변수와 함수들은 모두 스택의 자료구조에 의하여 관리됩니다.
- 스택을 활용하면 "재귀함수"를 필요로하는 소스코드에 "재귀함수"를 사용하지 않고 구현할 수 있습니다.
- 웹 브라우저의 방문기록에서도 스택의 특징을 활용하여 "뒤로가기"를 구현할 수 있습니다.
- 프로그램의 실행취소((Undo)에서 활용됩니다.
- 후위표기 계산식에서 활용됩니다.
이렇게 간단하게 스택(Stack)이라는 자료구조에 관하여 포스팅을 하였습니다.
IT디자이너였습니다.
감사합니다.
'BASE > 자료구조' 카테고리의 다른 글
[자료구조] 선형 연결 리스트(Singly Linked List)란? (0) | 2020.04.04 |
---|---|
[자료구조] 큐(Queue) & 원형 큐(Circle Queue)란? (0) | 2020.04.04 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- IT디자이너 #QuickSort #퀵정렬 #C언어 #C++ #자료구조 #알고리즘
- C언어 #C++ #switch #if #어셈블리어 #switch문 사용 이유 #IT디자이너
- IT디자이너 #C언어 #C++ #IT디자이너 #코딩테스트
- IT디자이너 #C언어 #C++ #속성지정자 #기억클래스 #IT #const #static #register #volatile #extern #auto #s
- C언어 #C++ #구조체 정렬 #pragma #IT디자이너
- 어셈블리어 #IT디자이너 #C언어 #C++언어 #어셈블리 #어셈블러
- C언어 #C++ #어셈블리어 #재귀함수 #IT디자이너
- C언어 #C++ #어셈블리어 #IT디자이너 #비트연산자 #연산자 #C언어의 비트 연산자
- C언어 #IT디자이너 #C++언어
- C언어 #C++ #삼각함수 #IT디자이너 #문제풀이 #2진수 #16진수 #비트 #bit #비트연산자
- C언어 #IT디자이너
- C언어 #포인터 #IT디자이너
- 디버그 #Debug #Release #디버그와 릴리즈 차이 #C언어 #C++언어 #어셈블리어
- C언어 #C++ #파일 입출력 #텍스트파일 #IT디자이너
- C언어 #C++ #IT디자이너 #함수 #재귀 함수 #스택 #자료구조 #페인팅
- C언어 #C++ #어셈블리어 #열거형 데이터타입 #IT디자이너
- C언어 #C++ #IT디자이너 #C++ 함수
- C언어 #포인터 #배열 포인터 #포인터 배열 #함수
- C언어 #C++ #IT디자이너
- C언어 #C++ #어셈블리어 #함수 호출 규약 #IT디자이너 #비쥬얼 스튜디오 #IT
- C언어 #IT디자이너 #포인터 #배열 #포인터와 배열
- C언어 #C++ #시간 함수 #타이밍 맞추기 #timer interrupt #IT디자이너
- C언어 #C++ #어셈블리어 #구조체 #구조체 특징 #IT디자이너
- 스택 #자료구조 #Stack #IT디자이너 #알고리즘 #C언어 #스택 과제 #C++
- Debug #C언어 #C++ #비쥬얼스튜디오 #Release #IT
- C언어 #C++ #캐시hit #캐시라인 #캐시무효화
- C언어 #스트림 #버퍼링 #표준 입출력 함수 #C++언어 #IT디자이너
- C언어 #C++ #자료구조 #알고리즘 #IT디자이너 #버블 정렬 #BubbleSort
- C언어 #자료구조 #C++ #연결리스트 #리스트 #알고리즘 #IT디자이너
- QUEUE #큐 #자료구조 #원형 큐 #Circle Queue #IT디자이너 #큐 과제 #C언어 #C++언어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함