이 프로그램을 사용하여 스택에서 데이터를 푸시하려고 시도하는 중 잘못된 출력이 표시됩니다. 스택 크기가 5이지만 스택 요소를 인쇄하면 잘못된 값을 제공하면서 무한 루프로 실행됩니다. 오류가 무엇입니까?C에서 linkedlist를 사용하여 스택을 구현하는 중 오류가 발생했습니다.
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
struct node *top = NULL;
int count = 0;
void push(int num) {
struct node *newNode = (struct node*)malloc(sizeof(int));
newNode->data = num;
newNode->next = NULL;
if (top == NULL) {
top = newNode;
} else {
struct node *temp = (struct node*)malloc(sizeof(int));
temp = top;
top = newNode;
top->next = temp;
free(temp);
}
count++;
}
int pop() {
if (top == NULL) {
printf("\nUnderflow- Stack is empty!");
return -1;
}
struct node *temp = (struct node*)malloc(sizeof(int));
temp = top;
top = top->next;
return temp->data;
}
int stackTop() {
if (top == NULL) {
printf("\nStack is empty");
return -1;
}
return top->data;
}
void printStack() {
if (top == NULL) {
printf("\nStack is empty. Nothing to print");
}
printf("\n");
while (top != NULL) {
printf("%d ", top->data);
top = top->next;
}
}
/* Count stack elements */
void stack_count() {
printf("\n No. of elements in stack : %d", count);
}
int main(void) {
int poppedValue, topValue;
push(1);
push(2);
push(3);
push(4);
push(5);
stack_count();
printStack();
poppedValue = pop();
topValue = stackTop();
printf("\nPop item : %d", poppedValue);
printf("\nTop Value: %d", topValue);
return 0;
}
출력 : 당신은 당신의 push()
function.You 내부 temp
노드를 사용할 필요가 없습니다
No. of elements in stack : 5
5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 ....
당신은 push''에 버그가 있습니다. 작은 프로그램을 디버깅하는 방법 (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)을 읽어보십시오. – StoryTeller
'struct node * newNode = (struct node *) malloc (sizeof (int));'struct node * newNode = malloc (sizeof (struct node)); ' – BLUEPIXY
'struct node * temp = (struct node *) malloc (sizeof (int)); 임시 직원 = 위쪽; top = newNode; top-> next = temp; 무료 (임시);'->'newNode-> 다음 = 위쪽; top = newNode;' – BLUEPIXY