链表的的这个算法是怎么运行的,请高手们帮帮忙?

子冲 2008-03-23 08:18:19
sqlist merge(sqlist A,sqlist B,sqlist *c) //把A,B表放入表中并保持有序
{
int i,j,k;
i=0;j=0;k=0; //记数
while ( i <A.length &&j <B.length) //
if (A.elem[i] <B.elem[j])
c->elem[k++] = A.elem[i++];
else
c->elem[k++] = B.elem[j++]; //用j记录B表
while (i <A.length) //last
c->elem[k++] = A.elem[i++];
while (j <B.length)
c->elem[k++]=B.elem[j++];
c->last=k-1;
return *c;
}
我看不太懂这个算法是怎么实行的,请大家帮我解释一下吧,谢谢!
...全文
87 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
子冲 2008-03-25
  • 打赏
  • 举报
回复
谢谢各位了!!!
mousear 2008-03-24
  • 打赏
  • 举报
回复
i指向a的第一个元素
j指向b的第一个元素
比较i和j当前指向元素的大小,小的加入到c中,同时对应的循环变量加1

最后判断如果a表有剩余,则肯定都大于b中元素,依次加入c中
如果b表有剩余,则肯定都大于a中元素,依次加入c中

自己举个例子走一遍就很快明白了
  • 打赏
  • 举报
回复
A、B显然是已经由小到大排好序的,整个运行过程就是一个归并排序的过程,归并后的结果储存在了C中。
laoma_hbu 2008-03-23
  • 打赏
  • 举报
回复
是线性表吧,不是链表

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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