c++编程题:建立一个链表,每个结点包括年龄和姓名,然后按年龄从小到大排序

如题所述

class PeopleNode
{
private:
float m_Age;
char m_Name[20];
PeopleNode *m_Next;
public:
void setPeopleData(char name[], float age) {strcpy(m_Name,name); m_Age = age;}
void setNext(PeopleNode *next) {m_Next = next;}
float getAge() {return m_Age;}
PeopleNode * getNext() {return m_Next;}
};

class PeopleLink
{
private:
PeopleNode *m_Head;
void addPeople()
{
char name[20];
float age;
while(1)
{
scanf("%s,%f",name, age);
if (age < 0.0)
break;
PeopleNode *node = new PeopleNode();
node->setPeopleData(name,age);
node->setNext(m_Head);
m_Head = node;
}
}
void sortPeople()
{
if (m_Head == NULL || m_Head->getNext() == NULL)
return;
PeopleNode *head = m_Head->getNext();
m_Head->setNext(NULL);
while(head != NULL)
{
PeopleNode *cur = head;
PeopleNode *tmp = m_Head;
head = head->getNext();
if (cur->getAge() < m_Head->getAge())
{
cur->setNext(m_Head);
m_Head = cur;
}
while(tmp->getNext() != NULL)
{
if (tmp->getNext()->getAge() > cur->getAge())
{
cur->setNext(tmp->getNext());
tmp->setNext(cur);
break;
}
tmp = tmp->getNext();
}
if (tmp->getNext() == NULL}
{
cur->setNext(tmp->getNext());
tmp->setNext(cur);
}
}
}
public:
PeopleLink()
{
m_Head = NULL;
addPeople();
sortPeople();
}
};
温馨提示:答案为网友推荐,仅供参考
相似回答