【问题标题】:How to use queue in different function?如何在不同的功能中使用队列?
【发布时间】:2016-03-25 16:27:56
【问题描述】:

队列中的项目不断重置。在主菜单中选择显示功能后,如何显示队列中的所有项目?如果我在使用“添加项目”功能放置项目后选择显示功能,它不会显示我放置的项目。在主菜单中选择显示功能后如何显示队列中的所有项目?

#include <iostream>
#include "linkedQueue.h"

using namespace std;

void mainMenu();
void addQueues();
void Display();

int main()
{
    mainMenu();
    system("pause>0");
    return 0;
}

void mainMenu()
{
    system("cls");
    int num;
    linkedQueueType<int> queue;
    cout << "\t\t\t OPERATIONS";
    cout << "\n\n  [1] Add items";
    cout << "\n  [2] Delete items";
    cout << "\n  [3] Show the number of items";
    cout << "\n  [4] Show min and max items";
    cout << "\n  [5] Find an item";
    cout << "\n  [6] Sort items";
    cout << "\n  [7] Print all items";
    cout << "\n  [8] Exit";

    cout << " \n\n Enter choice: ";
    cin >> num;
    switch (num)
    {
    case 1:

        int x;
        char ch;
        cout << "\nAdd number: ";
        cin >> x;
        queue.addQueue(x);
        cout << "Enter again? (Y/N)     ";
        cin >> ch;
        while (ch == 'Y')
        {
            cout << "\nAdd number: ";
            cin >> x;
            queue.addQueue(x);
            cout << "Enter again? (Y/N)     ";
            cin >> ch;
        }
        if (ch == 'N')
        {
            mainMenu();
        }
        break;

    case 7:

        cout << "Queue Elements: ";

        if (queue.isEmptyQueue())
            cout << "Queue is empty - add item first\n";
        else
        {
            while (!queue.isEmptyQueue())
            {
                cout << queue.front() << " ";
                queue.deleteQueue();
            }
        }

    break;

    default:
        cout << "Invalid" << endl;
    }
}

【问题讨论】:

  • deleteQueue() 中有 cout 吗?除此之外,您的程序中没有打印语句来显示 Queue 中的项目。

标签: c++ c queue


【解决方案1】:

问题在于对 mainMenu() 函数的递归调用,因为该队列被一次又一次地初始化。为避免这种情况,您可以将 num 初始化为 0 为 num=0,然后在 mainmenu() 中使用 while 循环并将代码放入 while 循环中

#include <iostream>
#include "linkedQueue.h"
using namespace std;
void mainMenu();
void addQueues();
void Display();

int main()
{
mainMenu();
system("pause>0");
return 0;
}

void mainMenu()
{
system("cls");
int num=0;
linkedQueueType<int> queue;
while(num!=8)
{
cout << "\t\t\t OPERATIONS";
cout << "\n\n  [1] Add items";
cout << "\n  [2] Delete items";
cout << "\n  [3] Show the number of items";
cout << "\n  [4] Show min and max items";
cout << "\n  [5] Find an item";
cout << "\n  [6] Sort items";
cout << "\n  [7] Print all items";
cout << "\n  [8] Exit";

cout << " \n\n Enter choice: ";
cin >> num;
switch (num)
{
case 1:

    int x;
    char ch;
    cout << "\nAdd number: ";
    cin >> x;
    queue.addQueue(x);
    cout << "Enter again? (Y/N)     ";
    cin >> ch;
    while (ch == 'Y')
    {
        cout << "\nAdd number: ";
        cin >> x;
        queue.addQueue(x);
        cout << "Enter again? (Y/N)     ";
        cin >> ch;
    }
    break;

case 7:

    cout << "Queue Elements: ";

    if (queue.isEmptyQueue())
        cout << "Queue is empty - add item first\n";
    else
    {
        while (!queue.isEmptyQueue())
        {
            cout << queue.front() << " ";
            queue.deleteQueue();
        }
    }

break;

default:
    cout << "Invalid" << endl;
}
}
}

【讨论】:

    【解决方案2】:

    问题在于对 mainMenu() 函数的递归调用。如

    if (ch == 'N')
    {
        mainMenu();
    }
    

    每次进入 mainMenu() 函数时,都会在函数堆栈上创建一个新队列,因此它不会包含来自先前函数调用的元素。您可能希望在 main() 函数(或其他地方)中初始化队列,然后将其作为参数传递给 mainMenu() 函数。

    【讨论】:

    • 有没有办法通过不执行 if (ch == 'N') { mainMenu(); 将项目添加到队列后显示主菜单} ?
    猜你喜欢
    • 2021-07-02
    • 2019-06-09
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    相关资源
    最近更新 更多