链表中使用冒泡排序首行无法参与的解决办法。(交换节点)

夜补衣 2021-03-14 05:28:58
最近在写学校要求的管理系统,使用到了链表。因为我懒,所以排序就想用最简单的冒泡排序,上网搜了好久,第一行的数据都不能参与到冒泡中,灵光一闪想到了在头节点前再加一个节点,以此来避开头节点无法排序的问题,且最后传递给其他函数时,只需要传递添加的节点的next就行了。(欢迎大佬批评指正)

void bubble_sort(struct account *head)
{
int i,count = 0,num;//count记录链表结点的个数,num进行内层循环,
struct account *p,*q,*tail;//创建三个指针,进行冒泡排序
struct account *add_head=NULL;
add_head=(struct account *)malloc(LEN); //这上下三行主要是加一个头节点,使第一行数据参与到冒泡中
add_head->next=head;
p = add_head;
while(p->next != NULL)
{
count++;
p = p->next;
}
for(i=0;i < count - 1;i++)
{
num = count - i - 1;
q=add_head->next;//令q指向第一个结点
p=q->next;//令p指向后一个结点
tail=add_head;//让tail始终指向q前一个结点,方便交换,也方便与进行下一步操作
while(num--)
{
if(strcmp(q->name , p->name)>0)
{
q->next=p->next; //先让q的下一个指向p的下一个,跳过p
p->next=q;//再让p的下一个指向q
tail->next=p; //最后让头节点指点p
}
tail = tail->next;
q=tail->next;
p=q->next;
}
}

mem_print(add_head->next);//直接给它next不香吗,枉费我绞尽脑汁!!!!!!
}
...全文
163 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-03
  • 打赏
  • 举报
回复
C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html
自信男孩 2021-03-15
  • 打赏
  • 举报
回复
只交换数据部分应该比较好处理。
链表节点交换,比较难处理。
赵4老师 2021-03-15
  • 打赏
  • 举报
回复
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633
forever74 2021-03-14
  • 打赏
  • 举报
回复
这就是为什么有些数据结构教材喜欢头结点而不是头指针。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧