在过去的几天里,我一直在为此苦苦挣扎。免责声明:这是一个家庭作业。我自己一直在努力,但我真的不知道我做错了什么。
我收到了航空公司、目的地、行李车号格式的航空公司航班行李信息列表。
我必须将此列表排序为一个新列表。新列表必须按航空公司排序,并且在每家航空公司内必须按目的地排序。
- 新加坡巴尔的摩 176
- ATA 阿伦敦 1549
- 大陆桥港 915
- 新加坡伯克利 878
- 新加坡 利沃尼亚 1462
- 广达弗里蒙特 1610
将整理为:
- ATA 阿伦敦 1549
- 大陆桥港 915
- 广达弗里蒙特 1610
- 新加坡巴尔的摩 176
- 新加坡伯克利 878
- 新加坡 利沃尼亚 1462
这是我现在正在使用的内容:
#Main.cpp#
int main()
{
Node * head = NULL;
ifstream fin("planes.txt");
string airline, destination;
int carNum;
while(!fin.eof())
{
fin >> airline >> destination >> carNum;
insertNode(airline, destination, carNum, head);
}
cout << endl;
system("pause");
return 0;
}
#Node.cpp#
void insertNode(string value1, string value2, int value3, Node *&head)
{
Node * ptr = head;
if (ptr == NULL || ptr->getString1() > value1)
{
insertAtHead(value1, value2, value3, head);
}
else
{
while (ptr->getNext() != NULL && ptr->getNext()->getString1() < value1)
{
ptr = ptr->getNext(); // advance to next node in list
}
insertValue(value1, value2, value3, ptr);
}
}
void insertValue (string value1, string value2, int value,Node *afterMe)
{
afterMe->setNext(new Node(value1, value2, value, afterMe->getNext()));
}
void insertAtHead (string value1, string value2, int value3,Node *&head)
{
head = new Node(value1, value2, value3, head);
}
我将省略我的 node.h,因为它只包含函数声明和简单的访问器函数。
我当前的 insertNode 函数仅按第一个值排序。这是我的 insertNode 函数的一个变体,我尝试按第一个值和第二个值开始排序。
这是相当丑陋的。即使在笔记本纸上写了几页之后,我仍然陷入了所有这些混乱之中。
void insertNode(string value1, string value2, int value3, Node *&head)
{
Node * ptr = head;
if (ptr == NULL || ptr->getString1() > value1)
{
insertAtHead(value1, value2, value3, head);
}
else
{
while (ptr->getNext() != NULL) //Keep going as long as I am not at the end of the list
{
if (ptr->getNext()->getString1() < value1) //If Airline in list is smaller then the Airline I am adding
{
ptr = ptr->getNext(); //Move onto the next value in the list
}
else if (ptr->getNext()->getString1() == value1) //If Airline in list is equivalent to the Airline I am adding
{
if(ptr->getNext()->getString2() < value2) //The airlines matched up. How do the destinations compare?
{
ptr = ptr->getNext(); //If the destination in the list is less than the one I am adding, move on
}
else
{
insertValue(value1, value2, value3, ptr); //If one I am adding is not less than the list, add it here.
}
}
else
{
insertValue(value1, value2, value3, ptr);
}
}
}
}