首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++ ..homework中的队列

c++ ..homework中的队列
EN

Stack Overflow用户
提问于 2011-03-24 14:37:04
回答 2查看 2.6K关注 0票数 2

我有作业要做。我试着解决这个问题,但我需要一些帮助。

  1. 使用队列ADT,不更改ADT的任何函数或过程。您必须创建一个结构的汽车,代表汽车将在车站等待排队,以清洗车身。每辆车都有自己的ID,它看起来像124ate 6,字符长,名字类似,例如Superpan和生产年份作为整数变量。在您的程序中,不应该显式调用队列ADT,而是使用全局函数来调用它们,(implicitly).
  2. Your主程序应该只具有声明和对全局函数的调用,不应该使用任何结构。您的输出的
  3. 首先应该如下所示:
    1. Park新车
    2. 打印
    3. move
    4. move

    H 115打印所有cars

    1. exit

我的答案是:

代码语言:javascript
复制
#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. “您的主程序应该只具有声明和对全局函数的调用,不应该使用任何结构。”这是否意味着我的代码是错误的,因为我写了所有的东西。我不明白。
EN

回答 2

Stack Overflow用户

发布于 2011-03-24 14:40:51

  1. 它是一个队列,因此您可以保存其中的第一个节点,并打印每个元素,删除并将其推回队列,直到您第二次看到它!第一个元素。
  2. 是的,您不应该用main编写所有程序,而应该使用函数和其他文件,这些文件都是由某种逻辑意义组织的。

编辑:

1.

代码语言:javascript
复制
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...
}

在注释“添加这里:.”的地方添加您的打印是

  1. 您应该添加像getUserInput()和printQueue()这样的函数来处理所有这些场景,主函数将只调用这些函数
票数 0
EN

Stack Overflow用户

发布于 2011-03-24 15:13:07

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

我相信你的导师鼓励你把你的代码分成单独的子程序,每个子程序只做一件事。按照这种风格,典型的main可能是:

代码语言:javascript
复制
int main() {
    MyDataStruct x;
    ReadInput(x);
    ProcessData(x);
    WriteOutput(x);
}

请注意,在for中没有main循环,没有增加销售额和复制税的表达式,根本不需要任何处理。所有的好东西要么在全局函数中,要么在数据结构的方法中。

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

代码语言:javascript
复制
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(),我认为这是合适的。注意全局变量。我假设,当您处理"exit“命令时,您将设置该变量以指示应该结束的处理。

祝你好运,回来告诉我们你的任务是如何完成的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5420831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档