Я получаю неправильный вывод, пытаясь вытолкнуть данные в стеке с помощью этой программы. Несмотря на то, что размер стека равен 5, печать элементов стека выполняется в бесконечный цикл при задании неправильных значений. Какая ошибка?Ошибка при реализации стека с использованием связанного списка в C
#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;
}
Выход:
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 *) таНос (SizeOf (INT)); temp = top; top = newNode; top-> next = temp; free (temp); '->' newNode-> next = top; top = newNode; ' – BLUEPIXY