본문 바로가기
BaekJoon/C++

10828 : 스택 (C)

by GrayChoi 2021. 1. 9.
반응형

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net


 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct {
    int data;
    struct Node *next;
} Node;

typedef struct {
    int count;
    Node *top;
} Stack;

void push(Stack *stack, int data) {
    Node *node = (Node*)malloc(sizeof(Node));
    node->data = data;
    node->next = stack->top;
    stack->top = node;
    stack->count++;
}

int pop(Stack *stack) {
    if(stack->count == 0) {
        return -1;
    } else {
        Node *node = stack->top;
        int data = node->data;
        stack->top = node->next;
        free(node);
        stack->count--;
        return data;
    }
}

int isEmpty(Stack *stack) {
    if(stack->count == 0) {
        return 1;
    } else {
        return 0;
    }
}

int top(Stack *stack) {
    if(stack->count == 0) {
        return -1;
    } else {
        return stack->top->data;
    }
}

int main(void) {
    int TestCase;
    scanf("%d", &TestCase);

    Stack s;
    s.top == NULL;
    s.count = 0;

    for(int i = 0; i < TestCase; i++) {
        char N[6];
        scanf("%s", N);
        if(!strcmp(N, "push")) {
            int data;
            scanf("%d", &data);
            push(&s, data);
        } else if(!strcmp(N, "pop")) {
            int data = pop(&s);
            printf("%d\n", data);
        } else if(!strcmp(N, "size")) {
            printf("%d\n", s.count);
        } else if(!strcmp(N, "empty")) {
            int data = isEmpty(&s);
            printf("%d\n", data);
        } else {
            int data = top(&s);
            printf("%d\n", data);
        }
    }

    return 0;
}

 

연결리스트를 이용해 스택을 구현하여 문제를 처리하였다.

 

반응형

'BaekJoon > C++' 카테고리의 다른 글

10845 : 큐 (C)  (0) 2021.01.10
9012 : 괄호 (C)  (0) 2021.01.09
10870 : 피보나치 수 5 (C++)  (0) 2020.12.21
10872 : 팩토리얼 (C++)  (0) 2020.12.20
2751 : 수 정렬하기 2 (C++)  (0) 2020.11.21

댓글