2017-01-27 1 views
-1

Code kompiliert nur gut, aber wenn ich versuche, die Pushed Integer-Werte zu pop oder anzuzeigen, stürzt es ab! Danke im Voraus, dass du mir geholfen hast.Warum funktioniert dieses Programm zum Stapeln mit verknüpfter Liste nicht?

#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(); 
} 

FUNKTION DRÜCKEN WERT

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"); 
    } 
    } 

FUNKTION einen Wert von LISTE 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); 
}} 

FUNKTION die gestapelte ELEMENTS

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

Verwenden Sie einen Debugger. Das ist der beste Weg, um solche Probleme zu beheben. – kaylum

+0

Ergänzen Sie die Endung '\ n' in' printf' (oder rufen Sie 'fflush (NULL);') auf. Kompiliere mit allen Warnungen und Debug-Informationen ('gcc -Wall -g'). ** Verwenden Sie den Debugger ** 'gdb', um das Programm Schritt für Schritt auszuführen. Benutze auch [valgrind] (http://valgrind.org/) –

+2

'if (oben == NULL) { newnode-> next = NULL;' -> 'if (oben == NULL) { newnode-> next = NULL; top = newnode; 'oder' newnode-> next = top; top = neuer Knoten; printf ("Einfügung erfolgreich \ n"); } '->' newnode-> next = top; } top = neuer Knoten; printf ("Einfügung erfolgreich \ n"); ' – BLUEPIXY

Antwort

1

Sie zu setzen vergessen ANZUZEIGEN zu top nach dem Einfügen des ersten Elements, ändern Sie zu (vergessen Sie auch nicht, Ihren Zuweisungsstatus zu überprüfen):

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"); 
} 
Verwandte Themen