linked stack output problems

Discussion in 'C++' started by xenoglaux, Jan 1, 2009.

  1. xenoglaux

    xenoglaux New Member

    Joined:
    Jan 1, 2009
    Messages:
    5
    Likes Received:
    0
    Trophy Points:
    0
    here is the code
    Code:
    #include <iostream.h>
    #include<stdlib.h>
    #include<conio.h>
    struct node
    {    
    int data;
        struct node *link;
     };
     struct node *top=NULL,*temp;
     void main()
     {    int choice,data;
         
              while(1)//infinite loop is used to insert/delete infinite number of nodes    
        {                cout << "\n1.Push\n2.Pop\n3.Display\n4.Exit\n";        
        cout << "\nEnter ur choice:";        
        cin >> choice;        
        switch(choice)        
    {  case 1:
       temp=(struct node *)malloc(sizeof(struct node));
       cout << "Enter a node data :";
       cin >> data;
       temp->data=data;
       temp->link=top;
       top=temp;   
                        
    break;   
                     
     case 2:    
       if(top!=NULL)           
       {   
                     
         cout << "The poped element is " << data,top->data;
       
          top=top->link;            
       }          
          else           
        {        cout << "\nStack Underflow";                }  
                 break;   
                          
     case 3: 
              temp=top;  
        if(temp==NULL)      
     {        cout << "\nStack is empty\n";  }   
           while(temp!=NULL)  
     {               
        cout << "->" <<data << "->",temp->data; 
                    temp=temp->link;            }   
              break; 
               
     case 4:       
      
       exit(0);        }           
           
      }  
        }
    
    here's the problem
    when i push a number say...
    2 4 5 6
    the display result is 6->6->6->6->
    when i choose pop options the result is
    The popped element is 6
    and i press 2 again to pop out
    The popped element is 6 (again)

    is there any mistaken in my code? :crazy:
    Thanks before
     
  2. skp819

    skp819 New Member

    Joined:
    Dec 8, 2008
    Messages:
    89
    Likes Received:
    3
    Trophy Points:
    0
    I am not sure but I think display should writer as below:
    Code:
    case 3: 
              temp=top;  
        [B]if(temp->link!=NULL)[/B]      
     {        cout << "\nStack is empty\n";  }   
           while(temp!=NULL)  
     {               
        [B]cout <<temp->data<<"->";[/B] 
                    temp=temp->link;           
     }   
              break;
    
     
    Last edited: Jan 2, 2009
  3. xpi0t0s

    xpi0t0s Mentor

    Joined:
    Aug 6, 2004
    Messages:
    3,009
    Likes Received:
    203
    Trophy Points:
    63
    Occupation:
    Senior Support Engineer
    Location:
    England
    Is the output really 6->6->6->6->, or is it ->6->->6->->6->->6-> ? Make sure you state EXACTLY the output from the program (for example, you've changed "poped" to "popped", so clearly either you haven't given the output from the program or you've changed the code since posting it).

    cout << "->" <<data << "->",temp->data;

    Interesting use of the comma operator. Maybe have another look at this line?

    Edit: oh yeah, and you've got a memory leak in case 2.
     
  4. skp819

    skp819 New Member

    Joined:
    Dec 8, 2008
    Messages:
    89
    Likes Received:
    3
    Trophy Points:
    0
    Here I am posting stack programming singly link list.
    From here you can learn it. It will help you to find your mistake in your programe.

    Code:
    #include<conio.h>
    #include<stdio.h>
    #include<iostream.h>
    #include<string.h>
    
    class link_stack
        
    {
    
        struct node
        
        {
    
            int id;
    
            char name[10];
    
            node *next;
    
        };
    
        node *top,*x,*ptr;
    
        public:
    
            link_stack()
    
            {
    
                top=x=ptr=NULL;
    
            }
    
            void push()
    
            {
    
                x=new node;
    
                cout << "Enter an ID number and name: ";
    
                cin >> x->id >> x->name;
    
    
                x->next=top;
    
                top=x;
    
            }
    
            int pop(char n[])
    
                    {    int result;
    
                            if(top==NULL)
    
                                    cout<<"\nStack is Empty";
    
                            else
    
                            {    result = top->id;
                                    
                                    strcpy(n, top->name);
    
                                    x=top;
    
                                    top=top->next;
    
                                    delete x;
    
                                    return result;
    
                            }
    
                    }
    
            void empty()
    {
    
                     char name[10];
                                
                             while(!obj.empty())
                                            
                             {
    
                                    cout << pop(name) << ": " << name << endl;
    
                              }
    
                     }
                
    };
    
    void main()
    
    {
    
        link_stack obj;
    
        int choice;
    
        do
    
        {
    
            cout << "\n ----------MENU---------- \n";
    
            cout << "1.Push\n"
                
                            <<  "2.Pop\n"
                   
                            <<  "3.Exit";
    
                     cout << "\nEnter your choice: ";
    
            cin>>choice;
    
            switch(choice)
    
            {
    
            case 1: obj.push();
    
                break;
    
            case 2: obj.pop();
    
            obj.empty();
    
                break;
    
            case 3: cout << endl;
    
            }
    
        }
    
        while (choice!=3);
    
        getch();
    
    }
    
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice