스택(STACK) - 자료구조
스택(stack)은 모든 원소들의 삽입(insert)과 삭제(delete)가 리스트의 한쪽 끝에서만 수행되는 제한 조건을 가지는 선형 자료 구조(linear data structure)로서, 삽입과 삭제가 일어나는 리스트의 끝을 top이라 하고, 다른 한쪽 끝을 bottom이라 한다. 스택은 종종 pushdown stack이라고도 하는데, 스택의 top에 새로운 원소를 삽입하는 것을 push라 하고, 가장 최근에 삽입된 원소를 의미하는 스택의 top으로부터 한 원소를 제거하는 것을 pop이라 한다. 이와 같은 스택 연상은 항상 스택의 top에서 발생하므로 top 포인터의 값을 1씩 증가 또는 감소시킴으로써 수행된다.
큐가 FIFO(first int first out)이고 스택은 FILO(first in last out)이다.
스택의 사용처는 가장 쉽게 볼 수 있는 곳이 여행 캐리어에 짐을 담았다가 푸는 행위이다. 여행 캐리어에 짐을 순서대로 담으면 나중에 꺼낼 때는 가장 마지막에 담은 것부터 꺼내게 되기 때문이다. 이 외에도 OS 내부적으로도 스택을 쓰는 곳이 있다. 예를 들어 함수를 재귀적으로 호출 한 경우 가장 나중에 호출한 것부터 닫힌다.
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 5
void Push(int nData);
int Pop();
int *pStack = NULL;
int main(){
// 메모리 할당
pStack = (int*)malloc((sizeof(int)) * STACK_SIZE);
// 초기화
for (int i = 0; i < STACK_SIZE; i++){
pStack[i] = NULL;
}
Push(1);
Push(2);
Push(3);
Push(4);
Push(5);
for (int i = 0; i < STACK_SIZE; i++){
printf("%d\n", Pop());
}
return 0;
}
void Push(int nData){
int nCount = 0;
for (int i = 0; i < STACK_SIZE; i++){
if (pStack[i] == NULL)
{
break;
}
nCount++;
}
if (nCount != STACK_SIZE){
pStack[nCount] = nData;
}
}
int Pop(){
int nCount = STACK_SIZE-1;
int nResult = 0;
for (int i = STACK_SIZE-1; i >0; i--){
if (pStack[i] != NULL)
{
break;
}
nCount--;
}
if (nCount != -1){
nResult = pStack[nCount];
pStack[nCount] = NULL;
}
return nResult;
}
'Programming > Algorithm' 카테고리의 다른 글
C언어 소수 구하는 프로그램 코드 (0) | 2018.05.19 |
---|---|
c언어 풍차(바람개비) 만들기 (122) | 2018.04.26 |
C언어 큐(QUEUE) 예제 (0) | 2018.04.25 |
c언어 반복문을 사용해서 10진수를 2진수 문자열로 만들기 (0) | 2018.04.20 |
c언어로 짠 어떤 숫자가 들어오든 1의 자리는 버리고 10의 자리는 올리기 (0) | 2018.04.20 |