728x90
Stack push(), pop()을 활용해서 stack overflow와 underflow을 살펴보는 예제코드
포스트 난이도: HOO_Junior
# Example Code
이번 포스트에서는 push()와 pop() 기능들을 살펴보면서 Stack에 대해서 복습해 볼 수 있다. 이전 예제코드에서 다뤘던 Struct, 구조체와 더불어 이번 코드에서는 Stack에서 사용되는 기본적인 기능들을 통해서 Stack의 overflow와 underflow가 어떻게 이루어지는 지를 살펴볼 수 있다. 코드가 점차적으로 길어지고 기능들을 추가되다 보니, 어려울 수도 있겠지만 나눠서 살펴보면 이해하기가 훨씬 수월하다. 각 기능들이 어떻게 작동하고 해당 예제코드에서 어떤 역할을 수행하는지를 우선적으로 이해해 보는 게 좋다. 예제코드를 꾸준히 직접 해 보다 보면 당장의 변화를 느낄 수는 없어도 장기적으로 코드에 대한 가독성이 높아지고 코드를 작성하는데 머릿속으로 구조화하는데 속도가 빨라지는 걸 느낄 수 있다.
마치 글쓴이가 하체 운동을 싫어하면서도 주기적으로 꾸준히 운동을 함으로써 멋진 엉덩이를 가질 수 있는 거와 같다. 솔직히 글쓴이의 상황보다 브로들의 코딩 실력 향상이 훨씬 더 빠를 것이다.
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
// Define
int stack[MAX_SIZE];
int top = -1;
// Function to push
void push(int value) {
if (top >= MAX_SIZE - 1) {
printf("Stack Overflow\n");
return;
}
stack[++top] = value;
}
// Function to pop
int pop() {
if (top == -1) {
printf(" STACK UNDERFLOW\n");
return -1;
}
return stack[top--];
}
// Function to add
void add() {
if (top < 1) {
printf("Insufficient operands for addition\n");
return;
}
int operand2 = pop();
int operand1 = pop();
push(operand1 + operand2);
}
// Function to divide
void divide() {
if (top < 1) {
printf("Insufficient operands for division\n");
return;
}
int operand2 = pop();
int operand1 = pop();
if (operand2 == 0) {
printf("Division by zero\n");
return;
}
push(operand2 / operand1);
}
void displayStack() {
if (top == -1) {
printf("Stack is empty\n");
return;
}
for (int i = 0; i <= top; i++) {
printf("\nPushing %d", stack[i]);
}
printf("\n");
}
// Display
void displayStackBar() {
if (top == -1) {
printf("Stack is empty\n");
return;
}
for (int i = top; i >= 0; i--) {
printf(" |%d|\n", stack[i]);
}
printf("\n");
}
// Main block
int main() {
push(10);
push(11);
push(12);
push(13);
push(14);
printf("Pushing 5 values to the stack:");
displayStack();
printf("Displaying the Stack:\n");
displayStackBar();
printf("\nAdding top two numbers and pushing the sum onto the stack:\n");
add();
displayStackBar();
printf("Pops the first two values off the stack and divide. Then push it back onto the stack:\n");
divide();
displayStackBar();
printf("Popping values from the stack:\n");
int poppedValue = pop();
printf("%d\n", poppedValue);
poppedValue = pop();
printf("%d\n", poppedValue);
poppedValue = pop();
printf("%d\n", poppedValue);
printf("\nAttempting to pop a value that isn't there:\n");
poppedValue = pop();
return 0;
}
# github link
https://github.com/WhoisHOO/HOOAI/blob/main/C%20Examples/stack_push_pop
728x90
'C and C++ > C and C++ Examples' 카테고리의 다른 글
[C Examples] Recursive power function: 제곱근 계산기 (2) | 2023.10.30 |
---|---|
[C++ Example] 포인터(Pointer)를 활용한 간단한 배열 값의 증가 예제코드 (0) | 2023.10.13 |
[C Examples] Struct를 활용하여 특정 위치의 값을 출력하거나 출력하는 순서를 바꿔보기 (4) | 2023.10.11 |
[C Examples] struct과 pointer를 활용한 선수별 점수 출력하기 (0) | 2023.10.02 |
[C Examples] struct을 활용한 영화 정보 출력하기 (0) | 2023.10.02 |
댓글