Stack 은 기본적으로 후입 선출!
프링글스 깡통같이 생긴거라서 늦게 넣은것일수록 먼저 나오게 된다.
글구 위에 더 쌓을수록 당연히 칸수는 높아지고 뺄수록 반대!
이거를 알고리즘으로 짜보자~.~
#include<stdio.h>#include<string.h>#define MAX 1000typedef 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 |