미누에요
[자료구조] 배열 기반 스택 (Stack) 구현 - C 본문
728x90
반응형
SMALL
스택(Stack)
- 선입후출(First-in Last-out)의 구조이다.
- 자료들이 계속해서 겹겹이 쌓이는 형태를 나타낸다.
- 상단의 위치를 나타내는 top을 변수로 가진다.
- top의 초기값은 -1이다.
- top이 -1일 때 이 스택은 비어있는 스택이다.
isEmpty()
- top이 -1이라면 true
- 그 외의 경우는 false
int isEmpty()
{
if (top == -1)
return 1;
else
return 0;
}
isFull()
- top이 (스택 크기-1)이면 true를 반환
- 그 외의 경우는 false
int isFull()
{
if (top == STACK_SIZE - 1)
return 1;
else
return 0;
}
Push(int val)
- val을 스택에 삽입하는 함수
- isFull()을 사용하여 가득 차있는지 확인
- 스택이 가득 차있다면 삽입 불가
- 가득 차있지 않다면 top의 값을 1 증가시킨 후 stack의 top번째 인덱스에 값 삽입
void Push(int val)
{
if (isFull())
{
printf("스택이 꽉 찼습니다.\n");
return;
}
top = top + 1;
stacks[top] = val;
}
Pop()
- 스택에 있는 값을 삭제하는 함수
- isEmpty()를 사용하여 빈 스택인지 확인
- 스택이 비어있다면 삭제 불가
- 비어있지 않다면 stack[top] 의 데이터 반환 후 top--
int Pop()
{
if (isEmpty())
{
printf("출력할 값이 없습니다.\n");
return -1;
}
int item = stacks[top];
top = top - 1;
return item;
}
전체 코드와 함께 실행 결과를 첨부하겠다.
전체 코드
#include <stdio.h>
#define STACK_SIZE 7
int top = -1;
int stacks[STACK_SIZE];
int isEmpty()
{
if (top == -1)
return 1;
else
return 0;
}
int isFull()
{
if (top == STACK_SIZE - 1)
return 1;
else
return 0;
}
void Push(int val)
{
if (isFull())
{
printf("스택이 꽉 찼습니다.\n");
return;
}
top = top + 1;
stacks[top] = val;
}
int Pop()
{
if (isEmpty())
{
printf("출력할 값이 없습니다.\n");
return -1;
}
int item = stacks[top];
top = top - 1;
return item;
}
void printArray()
{
for (int i = 0; i < top + 1; i++)
{
printf("%d\t", stacks[i]);
}
printf("\n");
}
int main(void)
{
Push(1);
Push(2);
Push(3);
Push(4);
Push(5);
printArray();
printf("Pop : %d\n", Pop());
printf("Pop : %d\n", Pop());
printArray();
}
실행 결과
728x90
반응형
LIST
'자료구조' 카테고리의 다른 글
[자료구조] 윤성우의 열혈 자료구조 08-1 이진 트리의 소멸 문제풀이 (0) | 2024.05.19 |
---|---|
[자료구조] 배열 기반 큐(Queue) 구현 - C (1) | 2024.05.01 |
[자료구조] 양뱡향 연결리스트(Doubly Linked List) - C (1) | 2024.05.01 |
[자료구조] 원형 연결 리스트(Circular Linked List) 구현 - C (0) | 2024.05.01 |
[자료구조] 단일 연결 리스트(Singly Linked List) 노드 삭제(Delete) 구현 - C (0) | 2024.03.30 |