typedef struct Data{
int money;
struct Data *next;
}DATA;
// 实现链表的排序函数(这里是一个单向链表的排序实现)
DATA* test(DATA* head){
DATA *pi;
DATA *pj;
DATA *prev_i=NULL;
DATA *prev_j=NULL;
int count=0; // 如果count=0,就是链表头部与其他元素交换,否则就是内部元素之间进行交换
// 冒泡进行链表排序(由大到小)
for(pi=head;pi;pi=pi->next){
prev_j = NULL;
for(pj=pi; pj; pj=pj->next){
if(pi->money < pj->money){
if(count >0){
prev_i->next = pj;
}
DATA *p1 = pi;
DATA *p2 = pj;
if(pi->next == pj){ // 两个元素之间相邻的
// 进行交换
DATA *tmp = p1;
p1->next = p2->next;
p2->next = p1;
}else{ // 两个元素之间不相邻的
// 进行交换
prev_j->next = p1;
DATA *tmp = p1->next;
p1->next = p2->next;
p2->next = tmp;
}
// 保持pi,pj指向的链表对应下标位置不变
pi = p2;
pj = p1;
// 让头指针指向包含money值最小的元素
if(count == 0){
head = pi;
}
}
prev_j = pj; // 指向pj指向的前一个元素
}
count++;
prev_i = pi; // 指向pi的前一个元素
}
// 打印验证
return head;
}
#include
using namespace std;
class Node
{
public:
int date;
Node *pNext;
};
class LinkList
{
private:
Node* Head;
public:
LinkList();
~LinkList();
void add(int NewValue);
void remove(int DelValue);
Node* GetHead() { return Head; };
void sort();
};
LinkList::LinkList()
{
Head = 0;
}
LinkList::~LinkList()
{
if (Head != 0)
{
Node *p = Head;
while (p != 0)
{
Node *tmp = p->pNext;
delete p;
p = tmp;
}
}
}
void LinkList::add(int NewValue)
{
Node *p = new Node;
p->date = NewValue;
p->pNext = 0;
Node *p1 = Head;
Head = p;
Head->pNext = p1;
}
void LinkList::remove(int DelValue)
{
Node *temp = Head;
int count = 0;
if (temp->date == DelValue)
{
Head = Head->pNext;
cout << "删除成功" << "\n";
}
else
{
while (temp->pNext != NULL)
{
if (temp->pNext->date == DelValue)
{
Node *curr = temp->pNext;
temp->pNext = curr->pNext;
delete curr;
count = 1;
break;
}
temp = temp->pNext;
}
}
}
void LinkList::sort() //冒泡排序
{
Node* nTempHead = Head;
while (nTempHead != NULL)
{
Node* nComp = nTempHead->pNext ;
while (nComp != NULL)
{
if (nTempHead->date > nComp->date)
{
int temp = nTempHead->date;
nTempHead->date = nComp->date;
nComp->date = temp;
}
nComp = nComp->pNext;
}
nTempHead = nTempHead->pNext;
}
}
int main()
{
LinkList link;
link.add(8);
link.add(4);
link.add(9);
link.add(1);
Node* n = link.GetHead();
link.sort();
while (n != NULL)
{
cout << n->date << endl;
n = n->pNext;
}
return 0;
}
帮你直接加了