C++对单向链表进行排序
生活随笔
收集整理的這篇文章主要介紹了
C++对单向链表进行排序
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#include <iostream>
using namespace std;
struct student
{int num;char name[10];float score[3];float sum;student *next;
};void main()
{student a[5];student *h, *curr, *temp, *last; //h頭指針,curr當(dāng)前指針,last當(dāng)前指針的上一個(gè)指針(curr的上一個(gè)指針)for (int i = 0; i < 5; i++){cout << "student" << i + 1 << ":"<<endl;cin >> a[i].name >> a[i].num >> a[i].score[0] >> a[i].score[1] >> a[i].score[2];a[i].sum = a[i].score[0] + a[i].score[1] + a[i].score[2];}h = a;for (int i = 0; i<4; i++)a[i].next = &a[i + 1];a[4].next = NULL;for (int j = 0; j<4; j++){curr = h;for (int i = 0; i<4 - j; i++){if (curr->sum>curr->next->sum){if (i == 0) //將第一個(gè)結(jié)點(diǎn)和第二個(gè)結(jié)點(diǎn)交換,此時(shí)需要改變頭指針{temp = h;h = h->next; //將頭指針設(shè)為第二個(gè)節(jié)點(diǎn)temp->next = h->next; //令第一個(gè)節(jié)點(diǎn)后面接第三個(gè)節(jié)點(diǎn)h->next = temp; //令第二個(gè)節(jié)點(diǎn)后面接第一個(gè)節(jié)點(diǎn)curr = h->next;continue;}else //交換curr和curr->next指針{last = h;for (int k = 0; k<i - 1; k++)last = last->next; //找出curr的上一個(gè)指針temp = curr; //原理和上面交換第一二個(gè)結(jié)點(diǎn)是一樣的,將上面i==0的代碼中的h替換成curr即可得到下面的代碼curr = curr->next;temp->next = curr->next;curr->next = temp;last->next = curr; //將上一個(gè)指針和交換后的curr指針相連}}curr = curr->next;}}//打印排序后的信息cout << "num" << '\t' << "name" << '\t' << "score1" << '\t' << "score2" << '\t' << "score3" << '\t' << "sum" << endl;for (int i = 0; i<5; i++){cout << h->num << '\t' << h->name << '\t' << h->score[0] << '\t' << h->score[1] << '\t' << h->score[2] << '\t' << h->sum << endl;h = h->next;}}
?
總結(jié)
以上是生活随笔為你收集整理的C++对单向链表进行排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 混淆矩阵及分类性能评估方法
- 下一篇: C++数组指针不能自增1/自减1