在c ++ ..homework队列

时间:2011-03-24 14:37:04

标签: c++ queue

我有一份功课。我试着解决它,但我需要一些帮助......

  1. 使用队列ADT并且不要更改任何ADT的功能或过程。你必须创建一个结构汽车,代表汽车将在车站等待队列,以洗车身。每辆车的ID都看起来像124ate [6个字符长]并且名称如下所示Superpan和生产年份作为整数变量。在您的程序中,您不应该显式调用Queue ADT,而是使用全局函数来调用它们(隐式)。
  2. 您的主程序应该只有声明和调用全局函数, 不应该使用任何结构。
  3. 您的输出应首先如下所示:
    1. 停放新车
    2. 打印汽车数量
    3. 移动最早来的车
    4. 打印所有车辆
    5. 出口
  4. 我的回答:

    #include <iostream>
    #include "queue.h"
    #include <string>
    
    using namespace std ;
    
    struct car {
        char ID[6];
        int year;
        string name;
    }
    
    int main ()
    {
        int num;
        car car1;
        Queue <car> q1;
    
        do {
            cout << "mniu \n"
              << "1. Park new car \n"
              << "2. Print the number of cars \n"
              << "3. move earliest coming car \n"
              << "4. Print All cars \n"
              << "5. exit \n";
    
            cin >> num;
    
            switch (num)
            {
            case 1:
                int n;
                cout << "enter id:\n";
                cin >> car1.ID;
                cout << "enter name:\n";
                cin >> car1.name;
                cout << "enter year:\n";
                cin >> car1.year;
    
                q1.enqueue (car1);
                break;
    
            case 2:
                cout << "number of cars: " << q1.queueCount();
                break;
    
            case 3:
                q1.dequeue(car1);
                break;
    
            case 4:
                while (q1.queueCount()!=0)  
                    cout << q1.front();
    
            case 5:
                cout << "Thank you /n End program";
                break;
    
            default:
                cout << "failed number. chose from 1 to 5 \n";
            }
        }
    
        while (num==5);
    
        return 0;
    
    }
    

    我的问题:

    1. 如何逐节点打印队列而不删除它?
    2. “你的主程序应该只有声明和调用全局函数, 不应该使用任何结构。“这是否意味着我的代码是错误的,因为我在主要部分写了一切......我不明白。

2 个答案:

答案 0 :(得分:0)

  1. 这是一个队列,所以你可以保存第一个节点,打印每个元素,删除并推回队列,直到你看到(第二次!)第一个元素。
  2. 是的,你不应该在main中编写所有程序,而是使用按一些逻辑含义组织的函数和其他文件。
  3. 修改

    1

    car first = q1.dequeue();
    q1.enqueue(first);
      //ADD HERE: print first...
    while (q1.peek() != first) {
      car element = q1.dequeue();
      q1.enqueue(first);
      //ADD HERE: print element...
    }
    


    添加您的打印,其中的评论“ADD HERE:...”

    2。你应该添加像getUserInput()和printQueue()这样的函数来处理所有这些场景,主要只是调用这些函数

答案 1 :(得分:0)

“你的主程序应该只有声明和调用全局函数,”

我相信你的导师会鼓励你将你的代码划分为单独的子程序,每个子程序只做一件事。在这种风格中,典型的main可能是:

int main() {
    MyDataStruct x;
    ReadInput(x);
    ProcessData(x);
    WriteOutput(x);
}

请注意for中没有main个循环,没有累加销售和副作用的税收表达式,主要不需要任何处理。所有好的东西都在你的全局函数或数据结构的方法中。

将其应用到您的程序中,您的主文件可能如下所示:

int globalExitFlag;
int main() {
    Queue<car> q;
    Car c;
    while( !globalExitFlag ) {
       int cmd;
       cmd = PrintMenuAndAcceptOneAnswer(q, c);
       DoOneCommand(q, c, cmd);
    }
}

然后,您可以将cin阅读的内容放在PrintMenuAndAcceptOneAnswer中,同时打印和队列操作位于DoOneCommand。当然,您必须自己编写PrintMenuAndAcceptOneAnswerDoOneCommand。我会进一步细分这些子例程 - 例如,DoOneCommand应该调用DoPrintAllCarsDoExitDoParkOneCar等。

最后,我确实在while中加了main(),我认为这是合适的。注意全局变量。我假设当你处理“退出”命令时,你将设置该变量以指示处理应该结束。

祝你好运,并回来告诉我们你的任务如何为你服务。