하루하루 꾸준히, 인생은 되는대로

자료구조

자료구조 - 백준 10828번 스택(C언어)

긤효중 2021. 9. 13. 00:34

스택의 연산(ADT)를 정의하고 실행하는 스택문제이다.

 

https://www.acmicpc.net/problem/10828

 

10828번: 스택

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

www.acmicpc.net

해결방안 ->스택의 ADT를 정의 후 문자열에 따라 어느 연산을 실행하는지 결정하면 된다.

(c언어의 strcmp함수를 이용함)

 

전체 소스 코드

 

#include<stdio.h>

#include<string.h>

#define LEN 10000

#define True 1

#define False 0

#include <stdio.h>

#include <string.h>

#define True 1

#define False 0

typedef struct _stack{

    int arr[LEN];

    int topindex;

}stack;

 

typedef stack Stack;

 

void Stackinit(Stack *pstack){

    pstack->topindex = -1//스택의 초기화

}

 

int Empty(Stack *pstack){

    if(pstack->topindex == -1){

        return True;  //비어있으면 1 비어있지 않으면 0

    }

    else

        return False;

}

 

void Push(Stack *pstack,int data){

 

    pstack->topindex = pstack->topindex + 1//스택 Push연산

    pstack->arr[pstack->topindex] = data;

 

}

 

int Pop(Stack *pstack){

    if(Empty(pstack)){ //스택 Pop연산

        return -1;

    }

    int rdata = pstack->arr[pstack->topindex];

    pstack->topindex = pstack->topindex - 1;

    return rdata;

 

int size(Stack *pstack){

    return pstack->topindex + 1//+1을 하는 이유는 topindex가 -1부터 시작하기 때문에 실제 스택에 들어있는 개수보다 1개 적기떄문이다

}

 

int top(Stack *pstack){

    if(Empty(pstack)){ //비었으면 -1 , 그렇지 않으면 제일 꼭대기(topindex) 값 리턴

       return -1;

    }

    return pstack->arr[pstack->topindex];

}

 

int main(void){

    Stack stack;

    Stackinit(&stack);

    

    int array[LEN];

    int n;

    scanf("%d",&n);

    char arr[6]; //문자열 입력받기 위한 변수

    

    for(int i = 0;i<n;i++){

       scanf("%s",arr);

       if(strcmp(arr,"push") == 0){

           int x;

           scanf("%d",&x);

           Push(&stack,x);

       }

      else if(strcmp(arr,"pop") == 0){

          printf("%d\n",Pop(&stack));

      }

      else if(strcmp(arr,"size") == 0){

          printf("%d\n",size(&stack));

      }

      else if(strcmp(arr,"empty") == 0){

          printf("%d\n",Empty(&stack));

      }

      else if(strcmp(arr,"top") == 0){

          printf("%d\n",top(&stack));

      }

        

    }

    

}




 

 

'자료구조' 카테고리의 다른 글

백준 4949번 C언어  (0) 2021.09.17
큐의 개념 + 백준 10845 C언어  (0) 2021.09.16
백준 20001번 c언어  (0) 2021.09.15
자료구조 - 17608번 C언어  (0) 2021.09.12
자료구조 -(스택) 백준 9012번  (0) 2021.09.11