方法一:
双链表的指针较为复杂,如果数据域部分较为简单,则直接对数据域进行交换即可。
void dLinkList::nameSort()
{ if(isEmpty())
cout<<"空链表!\n";
else if(length()==1)
cout<<*first;
else
{ Student<NodeType> *p=first,*q;
for(p=first;p!=rear;p=p->next)
for(q=p->next;q!=NULL;q=q->next)
{ if(strcmp(p->name,q->name)>0)
swap(p,q);
}
}
}
方法二
void StuLinkList::Student_Name_Sort()
{
if (IsEmpty())
{
cout << "\n链表是空的\n";
return;
}
string MaxNumber = "0", Temp = "0";
Stu *CurrentNode, *NewFirstNode = NULL, *PreNode = NULL, *NewRearNode = NULL;
do
{
CurrentNode = Firstnode;
while (CurrentNode)
{
Temp = CurrentNode->name;
if (Temp > MaxNumber)
{
MaxNumber = Temp;
NewFirstNode = CurrentNode;
}
Temp="0";
CurrentNode = CurrentNode->Nextnode;
}
MaxNumber ="0";
if ((NewFirstNode->Prenode) && (NewFirstNode->Nextnode))
{
NewFirstNode->Prenode->Nextnode = NewFirstNode->Nextnode;
NewFirstNode->Nextnode->Prenode = NewFirstNode->Prenode;
NewFirstNode->Prenode = NULL;
NewFirstNode->Nextnode = NULL;
}
else if (NewFirstNode->Prenode)
{
Rearnode = Rearnode->Prenode;
NewFirstNode->Prenode->Nextnode = NULL;
NewFirstNode->Prenode = NULL;
}
else if (NewFirstNode->Nextnode)
{
Firstnode = Firstnode->Nextnode;
NewFirstNode->Nextnode->Prenode = NULL;
NewFirstNode->Nextnode = NULL;
}
else
{
Firstnode = NULL;
Rearnode = NULL;
}
if (!PreNode)
{
PreNode = NewFirstNode;
NewRearNode = PreNode;
continue;
}
NewFirstNode->Nextnode = PreNode;
PreNode->Prenode = NewFirstNode;
PreNode = NewFirstNode;
} while (!IsEmpty());
Firstnode = NewFirstNode;
Rearnode = NewRearNode;
cout << "排序完成.\n";