菜单驱动的程序,堆栈为带字符信息的链表

menu driven program for stack as linked list with char info

本文关键字:字符 信息 链表 程序 菜单 堆栈      更新时间:2023-10-16

作为学校数据结构作业的一部分,我必须编写一个程序来实现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;
            }
        }
    }

以下程序在运行过程中不显示推送的字符。如果我推"Delhi",我会被推和弹出,但当我称之为横向时,它不会显示被推的成员。

此行错误:

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

相应地更改实现。