잰이_IT/알고리즘

[알고리즘_ 기초]Stack 으로 시작__c

janey25 2018. 12. 22. 18:27

Stack 은 기본적으로 후입 선출!

프링글스 깡통같이 생긴거라서 늦게 넣은것일수록 먼저 나오게 된다.

글구 위에 더 쌓을수록 당연히 칸수는 높아지고 뺄수록 반대!

이거를 알고리즘으로 짜보자~.~


#include<stdio.h>
#include<string.h>
#define MAX 1000
typedef struct Stack {
int s[MAX];
int top;
}; // 구조체 정의
// 스택이란 이름의 구조체에서 배열 s 크기는 MAX로 설정
// 스택은 젤 윗부분에 넣고 뺴기 때문에 그부분을 활용할 top 변수 지정
Stack stack;//Stack 구조체기능의 stack 만들어주기
void push(int x) {
if ((stack.top) == MAX - 1) {
// stack 이 full일 경우! 더이상 넣지못함
}
else stack.s[++stack.top] = x;
// 그런 경우가 아니라면 하나 높여준 top 값에 x 넣기
}
int pop() {
if (stack.top == -1) {
return -1; // 성공적이지 못할경우!
}
else {
stack.top -= 1;// 꺼내면 top-1!
return stack.s[stack.top + 1];
// 리턴값은 stack 맨위 top 값!
}
}
int top() {
if (stack.top == -1)
return -1; // top 이 -1이면 바닥인그!
else return stack.s[stack.top];
// 아니면 현재 스택의 top값 리턴
}// 이떄 top 값을 -1부터 시작했기에 칸의 아래쪽을 뜻함
int size() {
return stack.top;
}
int empty() {
if (stack.top == -1)
return 1;
else return 0;
}
int main() {
int num; //문자열을 받아볼 횟수
int pnum; //top 값을 받을 변수
int i;
char c[20]; // 문자열 값 입력받을 변수
stack.top = -1; // bottom to the top~
scanf("%d", &num); // 몇번 입력할끄냐
for (i = 0; i < num; i++) { // 돌려보쟈
scanf("%s", c); // 값을 받아따
if (!strcmp(c, "push")) {
scanf("%d", &pnum);
push(pnum); // push 면 받은값 넣기
}
else if (!strcmp(c, "pop")) {
printf("%d\n", pop());
}
else if (!strcmp(c, "size")) {
printf("%d\n", size());
}
else if (!strcmp(c, "empty")) {
printf("%d\n", empty());
}
else if (!strcmp(c, "top")) {
printf("%d\m", top());
}
else printf("다시 입력해 주세요");
}
return 0;
}


'잰이_IT > 알고리즘' 카테고리의 다른 글

[220601] 오랜만에 bfs,dfs...  (0) 2022.06.01
프로그래머스_신규아이디 추천  (0) 2022.04.24
프로그래머스_신고 결과 받기  (0) 2022.04.24
[백준 알고리즘] 2577_C++  (0) 2019.02.16