用于堆栈的菜单驱动程序作为带有char信息的链接列表

时间:2015-02-06 03:58:22

标签: c++ data-structures stack

作为数据结构学校作业的一部分,我必须编写一个程序来实现Stack作为链表。以下是我写的代码。

使用链接列表实现堆栈的C ++程序

    #include<iostream.h>
    #include<stdlib.h>
    #include<stdio.h>
    #include<string.h>

    /*
     * Node Declaration
     */
    struct node
    {
        char city[20];
        struct node *link;
    }*top;

    /*
     * Class Declaration
     */
    class stack_list
    {
        public:
        node *push(node *, char[20]);
        node *pop(node *);
        void traverse(node *);
        stack_list()
        {
            top = NULL;
        }
    };

    /*
     * Main: Contains Menu
     */
     int main()
    {
        int choice;
        char item[20];
        stack_list sl;
        do
        {
        cout<<"\n-------------"<<endl;
        cout<<"Operations on Stack"<<endl;
        cout<<"\n-------------"<<endl;
        cout<<"1.Push Element into the Stack"<<endl;
        cout<<"2.Pop Element from the Stack"<<endl;
        cout<<"3.Traverse the Stack"<<endl;
        cout<<"4.Quit"<<endl;
        cout<<"Enter your Choice: ";
        cin>>choice;
        switch(choice)
        {
        case 1:
            cout<<"Enter value to be pushed into the stack: ";
            gets(item);
            top = sl.push(top, item);
            break;
        case 2:
            top = sl.pop(top);
            break;
        case 3:
            sl.traverse(top);
            break;
        case 4:
            exit(1);
            break;
        default:
            cout<<"Wrong Choice"<<endl;
        }
        } while(choice !=4);
       return 0;
    }

    /*
     * Push Element into the Stack
     */
    node *stack_list::push(node *top, char city[20])
    {
        node *tmp=NULL;
        tmp = new (struct node);
        strcpy(tmp->city,city);
       // tmp->city[20] =item[20];
        tmp->link = top;
        top = tmp;
        return top;
    }

    /*
     * Pop Element from the Stack
     */
    node *stack_list::pop(node *top)
    {
        node *tmp;
        if (top == NULL)
            cout<<"Stack is Empty"<<endl;
        else
        {       
            tmp = top;
        cout<<"Element Popped: "<<tmp->city<<endl;
            top = top->link;
            free(tmp);
        }
        return top;
    }

    /*
     * Traversing the Stack
     */
    void stack_list::traverse(node *top)
    {       
        node *ptr;
        ptr = top;
        if (top == NULL)
            cout<<"Stack is empty"<<endl;
        else
        {
            cout<<"Stack elements :"<<endl;
            while (ptr != NULL)
            {
            cout<<ptr->city[20]<<endl;
                ptr = ptr->link;
            }
        }
    }

以下程序在运行期间不显示推送的字符。 如果我推“德里”,我会被推,然后当我打电话给横向时,它没有显示被推动的成员。

1 个答案:

答案 0 :(得分:2)

这一行错了:

        cout<<ptr->city[20]<<endl;

您需要使用:

        cout<<ptr->city<<endl;

建议更改stack_list

不要使用全局top,而是在类中创建成员变量top。然后,您可以简化成员函数。他们不再需要node*作为输入。

class stack_list
{
    public:
    node *push(char[20]);
    node *pop();
    void traverse();
    stack_list()
    {
        top = NULL;
    }
    private:
       node* top;
};

相应地更改实施。