在学习C语言的过程中,通过图书管理系统的一些简单程序实现当中,需根据图书的热度进行倒序排行的功能实现,最开始想的时候是类似与数组的冒泡排序进行操作,发现链表的部分链接中断,最后通过画图想了好久才想出来。
对于链表的冒泡排序本质上与数组的冒泡排序其实本质上并无区别,无非就是对于链表而言需要更改相应next指针指向的位置。
冒泡排序
例如:降序排列,遍历元素,依次比较相邻两个元素,将较小元素的节点往后排,遍历一次后,最小元素的节点排到了最后,下一次遍历元素个数减一。遍历次数为(数据节点的个数)。

以下函数代码为实现冒泡排序(配合上图更容易懂):
对应的结构体:
typedef struct book
{
int id; //图书编号
int bookNum; //图书数量
char bookName[30]; //图书名称
int hot; //图书热度
struct book * next;
}BOOK; //BOOK -- 节点 : 数据域 + 指针域
void sortRank(BOOK *h)
{
//判断链表是否为空
if(h == NULL || h->next == NULL)
{
return;
}
//初始化
BOOK *p = h;
BOOK *prev = h->next;
BOOK *end = h;
BOOK *temp;
int count =0;
while(prev != NULL) //计算遍历次数
{
count++;
prev = prev->next;
}
prev = h->next;
int i,j;
for(i = count;i>0;i--)//遍历循环 ,每遍历一次,就少比较一个数据
{
//循环比较前初始化
end = h;
p = h;
prev = h->next;
for(j= 0;j < i-1;j++)//开始依次比较,比较i-1次
{
end = p;
p = prev;
prev = prev->next;
if(p->hot < prev->hot)
{
p->next = prev->next;
prev->next = p;
end->next = prev;
temp = p;
p = prev;
prev = temp;
}
}
}
}如果有疑问和见解,欢迎大家提出来一起分享。(新手作文,写的不太明白,见谅见谅~)
版权声明:本文为Joyerx原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。