2017-01-27 2 views
-1

Код компилируется просто отлично, но когда я пытаюсь всплывать или отображать сдвинутые целочисленные значения, он сбой! Спасибо заранее за то, что помогли мне.Почему эта программа укладки с использованием связанного списка не работает?

#include<stdio.h> 
#include<stdlib.h> 
struct node 
{ 
int data; 
struct node* next; 
}*top=NULL; 

void push(int); 
    void pop(); 
void display(); 



void main() 
{ 
int choice,value; 
while(1){ 
printf("\n-----MENU-----\n"); 
printf("\n1. Push\n2. Pop\n3. Display\n4. Exit"); 
printf("\nEnter your choice\n"); 
scanf("%d",&choice); 
switch(choice) 
{ 
    case 1: printf("Enter a number to push\n"); 
    scanf("%d",&value); 
    push(value); 
    break; 
    case 2: pop(); 
    break; 
    case 3: display(); 
    break; 
    case 4: exit(0); 
}} 
getch(); 
} 

ФУНКЦИЯ PUSH ЗНАЧЕНИЯ

void push (int value) 
{ 
struct node*newnode; 
newnode = (struct node*)malloc(sizeof(struct node)); 
newnode->data=value; 
if(top==NULL){ 
newnode->next=NULL; 
} 
else 
{ 


    newnode->next=top; 
    top=newnode; 
    printf("Insertion successful\n"); 
    } 
    } 

ФУНКЦИЯ POP ЗНАЧЕНИЯ ИЗ СПИСКА

void pop() 
    { 

    if (top==NULL) 
    { 
    printf("Nothing to delete"); 
} 
else{ 
struct node *temp=top; 
printf("Deleted element %d", temp->data); 
top=temp->next; 
free(temp); 
}} 

функция отображения СТеке ЭЛЕМЕНТОВ

void display() 
{ 
if(top==NULL) 
{ 
    printf("List is empty\n"); 
} 
else 
{ 
    struct node *temp=top; 
    while(temp->next!=NULL) 
    { 
     printf("%d",temp->data); 
     temp=temp->next; 
    } 
    printf("%d ----->NULL", temp->data); 
    } 
} 
+1

Используйте отладчик. Это лучший способ отладить такие проблемы. – kaylum

+0

Добавить конец '\ n' в' printf' (или вызвать 'fflush (NULL);'). Скомпилируйте все предупреждения и информацию об отладке ('gcc -Wall -g'). ** Используйте отладчик ** 'gdb' для запуска программы шаг за шагом. Используйте также [valgrind] (http://valgrind.org/) –

+2

'if (top == NULL) { newnode-> next = NULL;' -> 'if (top == NULL) { newnode-> следующая = NULL; top = newnode; 'или' newnode-> next = top; top = newnode; printf ("Вставка успешно \ n"); } '->' newnode-> next = top; } top = newnode; printf («Вставка успешно \ n»); ' – BLUEPIXY

ответ

1

Вы забыли установить top после вставки первого элемента, измените на (также никогда не забудьте проверить свой статус распределения):

void push (int value) { 
    struct node *newnode = malloc(sizeof(struct node)); 
    if (newnode==NULL) { /* error */ } 
    newnode->data=value; 
    newnode->next=top; 
    top=newnode; 
    printf("Insertion successful\n"); 
} 
Смежные вопросы