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

子冲 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;
}
我看不太懂这个算法是怎么实行的,请大家帮我解释一下吧,谢谢!
...全文
55 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
子冲 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
是线性表吧,不是链表
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-23 08:18
社区公告
暂无公告