-1

我需要为菜单驱动程序制作一个 C++ 程序,以使用数组入队、出队、计算元素数量并在 C++ 中显示来执行以下队列操作?这个怎么做?我的 c++ 很弱,谁能指导我或帮助我或将我链接到一个完整的程序来学习和理解它?!!!我试过了,但我做不到,所以我真的需要帮助

这对不对?

#include<iostream.h>
#include<conio.h>
void push(int st[],int data,int &top);      //declaring a push class
void disp(int st[],int &top);       //declaring display class
int pop(int st[],int &top);                       //declaring a pop class
int flg=0;
int top=-1,tos=-1;
int st[50];

void push(int st[],int data,int &top)          //push
{
    if(top==50-1)
    flg=0;
    else
    {
        flg=1;
        top++;
        st[top]=data;
    }
}

int pop(int st[],int &top)                      //pop
{
    int pe;
    if(top==-1)
    {
        pe=0;
        flg=0;
    }
    else
    {
        flg=1;
        pe=st[top];
        top--;
    }

    return(pe);
}

void disp(int st[],int &top)                //display
{
    int i;
    if(top==-1)
    {
        cout<<"\nStack is Empty";
    }
    else
    {
        for(i=top;i>=0;i--)
        cout<<"\t"<<st[i];
    }
}

void main()
{
    int dt,opt;                              // declare varible
    int q=0;
    clrscr();
    cout<<"\t\t\tStack operations";
    cout<<"\n\n\tMain Menu.........";
    cout<<"\n\n1.Push";
    cout<<"\n\n2.Pop";
    cout<<"\n\n3.Exit";
    cout<<"\n\n4.display";

    do                                     // useing do while for to make choice and select any options
    {
        cout<<"\n\n\tEnter Your Choice 1-4:";            //entering your choice
        cin>>opt;

        switch(opt)
        {
            case 1:
                cout<<"\nEnter the Element to be Push:";
                cin>>dt;
                push(st,dt,tos);

                if(flg==1)
                {
                    cout<<"the push is done";

                    if(tos==50-1)
                        cout<<"\nStack is Now Full";
                }
                else
                   cout<<"\nStack Overflow Insertion Not Possible";
            break;
            case 2:
                dt=pop(st,tos);
                if(flg==1)
                {
                    cout<<"\n\tData Deleted From the Stack is:"<<dt;
                    cout<<"\n \t pop is done";
                }
                else
                    cout<<"\nStack Empty,Deletio Not Possible:";
            break;
            case 3:
                q=1;
            break;
        default:
                            cout<<"\nWrong Choice Enter 1-3 Only";

        case 4:
                disp(st,tos);
        break;
        }
    } while(q!=1);
}
4

1 回答 1

0

STL 库中有一个队列集合,它为您提供上面所需的所有功能,如果由于某种原因不允许您使用它,那么我建议以下逻辑可能会有所帮助

  • 当从队列的前面弹出一个项目时,所有其他项目必须向下复制 1 个元素,为此使用 for 循环

例如

for (int index = 1; index < arraySize; index++)
{
     if (item[index] == -1)
     {
         item[index-1] = -1;
         break;
     }

     item[index - 1] = item[index];
}
  • 当一个元素被删除时,队列中该项目之后的所有项目必须向下移动1个空间,找到被删除元素的索引并使用for循环

例如

for (int index = deletedItemIndex; index < arraySize; index++)
{
     if (item[index] == -1)
         break;

     item[index] = item[index + 1];
}
  • 当一个项目被添加到队列中时,它只是放在队列的末尾,但不一定是数组的末尾(也许用 -1 初始化所有数组元素开始,这样你就可以轻松测试你是否在队列的末尾)
于 2013-11-06T04:09:42.877 回答