Implement Stack Using Array with Push and Pop Operations

Code

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <cstdlib>

#define MAX 10

typedef struct {
    int* buffer;
    int count;
    int head;
    int top;
} Stack; 

void info(Stack *s) {
    printf("Head value: %d\n", s->buffer[s->head - 1]);
    printf("Head index: %d\n", s->head);
    printf("Count: %d\n", s->count);
}

void push(Stack* s, int x) {
    if(s->count == MAX)
    {
        printf("Stack Overflow\n");
        return;
    } 

    s->count++;
    s->buffer[s->head] = x;
    s->head++;
}

void pop(Stack* s) {
    if(s->count == 0) {
        printf("Stack Underflow\n");
        return;
    }
    printf("%d\n", s->buffer[s->head - 1]);
    s->count--;
    s->head--;
}


void process_stack(int n) {
    // Your logic here
    Stack s = {0};
    s.buffer = (int *)malloc(MAX*sizeof(int));

    while(n--) {
        char cmd[10];
        scanf("%s", cmd);
        if(strcmp(cmd,"push") == 0) {
            int param=0;
            scanf("%d",&param);
            push(&s,param);
        } else {
            pop(&s);
        }

        // info(&s);
    }
}

int main() {
    int n;
    scanf("%d", &n);
    getchar(); // Consume newline after number

    process_stack(n);
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

5 push 10 push 20 pop pop pop

Expected Output

20 10 Stack Underflow