stack -c

성시준·2024년 12월 19일

C자료구조

목록 보기
1/1

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;

}

0개의 댓글