邻接链表C ++显示

时间:2013-04-26 17:10:29

标签: c++ linked-list adjacency-list

我创建了一个邻接链表来显示城市之间的航班。该程序从2个文件中读取,一个包含城市名称,另一个包含不同航班的来源和目的地。我为所服务的城市创建了一个数组,并为数组的每个城市索引创建了连接城市的链接列表。但是,我在打印列表时遇到问题。我的出局看起来像这样:

Origin --  Dest     ---      Flight No. --       Price  

NYC    ---          Chicago  --        3123   ----             123  
NYC    ----        Miami    ----        2123      ----          543    
NYC         ----     Seattle   ---       9283        ----        243  

我想知道我是否可以打印一次原产地城市。

这是我的结构和其他东西的代码:

 struct flight
 {
       int fNumber;
       string source;
       string dest;
       int price;    
 }

输出的重载运算符 p.source是来源,p.dest是目的地,依此类推

 ostream& operator<<(ostream & os, const flight & p)
 {
       os <<"From "<< p.source << " to: ";
       int diff=0;
       diff= 35- p.source.length();
       os << fixed<< setw(diff)<<right<< p.dest;
       os << setw(10)<<right<<p.fNumber;
       os << setw(10)<<right<<p.price;
       return os;
 }

和显示功能

void flightMap::display()
{
      cout<<setw(15)<<"Origin   "<<setw(30)<<"Destination"<<setw(12)<<"Flight     "<<setw(13)    <<"Price     "<<endl;
      cout<<"================================================================="<<endl;

      for (int i=0; i<number;  i++)
      {
            flightRecord[i].display();
      }
}

我希望我的输出看起来像这样

Origin Dest Flight No. Price

NYC Chicago 3123 123  
  ----   Miami 2123 543  
  ----  Seattle 9283 243  

1 个答案:

答案 0 :(得分:2)

您可以这样做,但可能需要对代码进行一些重组。首先要改变的是这个

ostream& operator<<(ostream & os, const flight & p)

这是标准的打印方式,但这里不够好,因为没有办法告诉这个功能是否打印源城市。所以让我们写一个不同的函数

void printFlight(ostream & os, const flight & p, bool printSource)
{
   if (printSource)
       os <<"From "<< p.source << " to: ";
   else
       os <<"From --- to: ";
   ...
}

现在你可以在你的循环中使用该功能,只要你记住你打印的最后一个源城市是什么。如果最后一个源城市与当前源城市不同,则打印源城市,否则不打印。像这样的东西

string lastSource = "";
for (int i=0; i<number;  i++)
{
    printFlight(cout, flightRecord[i], flightRecord[i].source != lastSource);
    lastSource = flightRecord[i].source;
}