单链表(带头结点)如何进行冒泡排序?

flyarry 2005-04-20 04:52:20
题目如题了.
主要是控制条件如何设置?
想了好久没想出来...
...全文
235 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
llmsn 2005-04-21
  • 打赏
  • 举报
回复
也是插入的操作啊.
pl_010100100001 2005-04-21
  • 打赏
  • 举报
回复
不知道这个函数是不是楼主要的,如下:

函数构建思想:排序前,先在链表的首结点之前插入一个辅助结点,
待排序结束后,再释放该结点.

struct node *lb_sort(srtuct node *h)
{
struct node * endpt, * u, * v, * p;
u = (struct node *)malloc(sizeof(struct node));
u->link = h;
h = u;
for(endpt = NULL; endpt != h; endpt = p)
for(p = u = h; u->link->link != endpt; u = u->link)
if(u->link->data > u->link->link->data){ /* 两相邻结点比较 */
v = u->link->link;
u->link->link = v->link;
v->link = u->link;
u->link = v;
p = u->link->link;
}

u = h;
h = h->link;
free(u);

return h;
}

代码来自 <<程序员技术与水平>> 参考书
fire314159 2005-04-21
  • 打赏
  • 举报
回复
把两个元素的替换改成两个节点的指针的变换。把数组下标越界的判断(数组个数)改成对是否NULL的判断。有没有头节点都一样。头节点只是为了统一对所有有效节点作法。对问题没有影响
flyarry 2005-04-21
  • 打赏
  • 举报
回复
谢谢pl_010100100001(男儿当自强)!

按你给出的算法,链表是没有头结点的吧.
还有这两句怎么理解呢?
for(endpt = NULL; endpt != h; endpt = p)
for(p = u = h; u->link->link != endpt; u = u->link)
bianliuwei 2005-04-20
  • 打赏
  • 举报
回复
和对数组进行冒泡排序没有区别的呀,只不过比较的值从数组的元素变成了链表结点的某个成员.

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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