1단계: stack의 기본적인 부분 구현
#include <stdio.h>
#include <stdbool.h>
#define STACK_SIZE 6
typedef struct {
int data[STACK_SIZE];
int top;
}Stack;
// 스택 최기화 함수
void initstack(Stack* stack) {
stack->top = -1; //구조체의 포인터에 값을 넣는 방법
}
bool isEmpty(Stack* Stack) {
return Stack->top == -1; // -1인지 확인
}
//스택이 가득 찼는지 확인
bool isFull(Stack* Stack) {
return Stack->top == STACK_SIZE - 1;
}
2단계: push
bool push(Stack* stack, int value) {
if (isFull(stack) == 1) {
printf("stack overflowed");
return false;
}
stack->data[++stack->top] = value;
//top의 값을 증가후에 data[top] 해서 value를 넣기
return true;
}
#include <stdio.h>
#include <stdbool.h>
#define STACK_SIZE 6
typedef struct {
int data[STACK_SIZE];
int top;
} Stack;
// 스택 초기화 함수
void initStack(Stack* stack) { //이름이 중복되면 안됨
stack->top = -1; // 구조체의 포인터에 값을 넣는 방법
}
// 스택이 비어 있는지 확인
bool isEmpty(Stack* stack) {
return stack->top == -1; // -1인지 확인
}
// 스택이 가득 찼는지 확인
bool isFull(Stack* stack) {
return stack->top == STACK_SIZE - 1;
}
// 스택에 요소를 추가
bool push(Stack* stack, int value) {
if (isFull(stack)) { // 조건문 수정 ==1은 적절하지 않음
printf("Stack Overflow!\n");
return false;
}
stack->data[++stack->top] = value; // top 값을 증가 후 value 삽입
return true;
}
// 스택에서 요소 제거
bool pop(Stack stack, int popvalue) {
if (isEmpty(stack)) { // 조건문 수정
printf("Stack Underflow!\n");
return false;
}
*popvalue = stack->data[stack->top--]; // 값을 반환 후 top 감소
return true;
}
int main() {
Stack myStack;
initStack(&myStack);
// Push 테스트
push(&myStack, 10);
push(&myStack, 20);
push(&myStack, 30);
// Pop 테스트
int value;
if (pop(&myStack, &value)) {
printf("Popped value: %d\n", value);
}//30
if (pop(&myStack, &value)) {
printf("Popped value: %d\n", value);
}//20
return 0;
}