스택의 연산(ADT)를 정의하고 실행하는 스택문제이다.
https://www.acmicpc.net/problem/10828
해결방안 ->스택의 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 |