2011-03-24 76 views
2

我有作业。我试图解决它,但我需要一些帮助..队列在C++ ..家庭作业

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

我的回答:

#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. “你的主程序只应该声明和调用全局函数, 不应该使用任何结构。”这是否意味着我的代码是错误的,因为我写的所有内容都是主要的..我不明白。
+0

什么意思使得“不应该使用结构”的要求?你将如何模拟一辆汽车?类也是默认情况下具有公共访问权的结构。 – harper 2011-03-24 15:18:14

+0

+1用于发布您的代码并且不要求人们编写您的程序。 – 2011-03-24 16:48:32

回答

0
  1. 这是一个队列,这样可以节省第一个节点,它,并打印出每个元素,删除,并将它推回队列,直到看到(用于第二次!)的第1个要素。
  2. 是的,你不应该写在main中的所有程序,而是使用函数和其他文件,按照某种逻辑意义组织。

编辑:

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


添加您的打印其中的意见 “在这里补充:......” 的

2.您应添加功能,如getUserInput()和printQueue()来处理所有这些scenerios,主要将这些函数调用

+0

谢谢你amit gr .. 1 - 我该如何使用队列ADT功能2 - 你的意思是我把everytheng放在全局函数中吗?但是我的代码怎么会有开关,很多选择如何。对不起,但我可以解释.. – hnoo 2011-03-24 14:44:05

+0

我编辑了答案,看看你现在能否更好地理解它... – amit 2011-03-24 15:00:27

+0

p.s.这是一个半伪代码,尤其是我没有检查指针/引用类型/值类型的正确性 – amit 2011-03-24 15:02:38

0

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

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

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

注意,没有for循环中main,没有附加上了,销售和copmute最税表情,没有什么主要要求任何处理。所有的好东西都在你的全局函数或数据结构的方法中。

将其应用于你的程序,你的主要可能是这样的:

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

然后你就可以把你的cinPrintMenuAndAcceptOneAnswer阅读的胆量,而印刷和队列操纵住在DoOneCommand。当然,你必须自己写PrintMenuAndAcceptOneAnswerDoOneCommand。我将进一步打破这些子程序 - 例如,DoOneCommand应该叫DoPrintAllCarsDoExitDoParkOneCar

最后,我也把while在这个main(),我认为这是适当的。注意全局变量。我假设当你处理“退出”命令时,你将设置该变量来指示处理应该结束。

祝你好运,并回来告诉我们你的任务是如何实现的。