모두의 코드 커뮤니티

자료구조 배열 코드 질문있습니다

push pop 관련 과제중인데
출력하는면 이렇게 나옵니다. 무엇이 문제인가요?

#include <stdio.h>

#define MAX_SIZE 10

void push(int input);
void print_Stack(void);
int pop(void);

int stack[MAX_SIZE]; //스택을 위한 배열
int top = -1; // 맨 위의 원소를 나타낼 top변수, 기본값은 -1

int stack_full() { // 스택이 포화 상태인지 검사하는 함수
if (top >= MAX_SIZE - 1) {
	printf("Error : Stack is full.\n"); // 에러메세지 출력
	return 1; // 1 반환 (true)
}
return 0; // 그렇지 않을 경우 0으로 반환(false)

}

int stack_empty() { // 스택이 공백 상태인지 검사하는 함수
if (top == -1) { // top이 -1인 경우
	printf("Error : Stack is empty. \n"); // 에러메시지 출력
	return 1; // 1 반환(true)
}
return 0; // 그렇지 않을 경우 0으로 반환(false)
}


void push(int input) // 스택에 원소를 삽입하는 함수
{

if (top >= (MAX_SIZE - 1)) // 스택이 가득 차면, 더 이상 삽입 불가능함
	return;

stack[++top] = input; // 스택에 데이터 삽입
}

int pop(void)  // 스택에 원소를 제거하는 함수
{
if (top = -1) // 스택이 비어있는 경우에는 pop을 할 수 없음 
	return;

return stack[top--]; // 가장 마지막에 들어온 데이터를 반환
}

int main(void) {
// test code
pop();
push(3);
push(5);

}

void print_Stack(void) { // 스택의 모든 원소를 출력하는 함수
if (!stack_empty()) { // 스택이 비어있지 않은 경우
	for (int i = 0; i <= top; i++) { // 스택의 원소를 출력하기 위한 for문}
		printf("\n");
	}
}

좋아요 1

코드를 제대로 정렬해서 올려주세요.

일단 눈에 바로 보이는 문제는

if (!isEmpty()) { // 스택이 비어있지 않은 경우
for (int i = 0; i <= top;) { // 스택의 원소를 출력하기 위한 for문}
printf("/n");
}
}

여기에서 for 문 안에 i 를 증가시키는 부분이 빠졌네요. 아니면 무한히 loop 돕니다.

이렇게 수정하면 될까요? 그래도 실행이 안 되는데 원인을 모르겠어요ㅜㅜ

void print_Stack(void) { // 스택의 모든 원소를 출력하는 함수
if (!isEmpty()) { // 스택이 비어있지 않은 경우
	for (int i = 0; i <= top; i++) { // 스택의 원소를 출력하기 위한 for문}
		printf("\n");
	}
}

오류가 같나요? 맥에서 작성한 코드를 윈도우에서 연것 같은데, 텍스트를 메모장 같은데 붙였다가 다시 복사해보세요. 맥이랑 윈도우랑 개행문자 형식이 달라서 위와 같은 오류가 날 수 있어요

'40바이트인데 실제로는 ‘top–’ 바이트만 읽을 수 있습니다.'가 무슨뜻인가요?

if (top = -1) // 스택이 비어있는 경우에는 pop을 할 수 없음 
	return;

return stack[top--]; // 가장 마지막에 들어온 데이터를 반환

여기에서 top 이 -1 이랑 비교하는 것이 아니라 top 에 -1 을 대입하고 있습니다. top == -1 로 해야 합니다.