|
以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 计算机考研交流 』 (http://bbs.xml.org.cn/list.asp?boardid=67) ---- 关于课本堆代码的一个问题? (http://bbs.xml.org.cn/dispbbs.asp?boardid=67&rootid=&id=55200) |
|
-- 作者:hanshumin -- 发布时间:11/11/2007 11:05:00 PM -- 关于课本堆代码的一个问题? remove函数(121页) //删除给定下标的元素 remove(int pos, T& mode) { if((pos<0)||(pos>=currentsize)) return false; T temp = heapArray[pos]; heapArray[pos] = heapArray[--currentsize]; SiftUp(pos); SiftDown(pos); node = temp; return true; } |
|
-- 作者:hanshumin -- 发布时间:11/11/2007 11:05:00 PM -- 我感觉应该分类讨论一下。因为待删除的结点要与最后一个结点交换。当交换后,待删除的结点所在的位置的值是最后一个结点值的大小,此时它有可能比先前删除的结点小,大或者相等。如果相等,就不用作什么工作,如果小的话,只需要SIFT UP(),如果大的话,只需要SIFT DOWN().大家认为呢? |
|
-- 作者:hanshumin -- 发布时间:11/11/2007 11:07:00 PM -- one answer: 不是。其实这里的siftup和siftdown只有一个起到作用。但不知道是哪个,所以都用。如果堆的内容是1,100,80,150,300,210,85(按照完全二叉树的结构),那么删除150的时候,85替换150的位置,故需要siftup |
|
-- 作者:lionx -- 发布时间:11/12/2007 9:57:00 AM -- 我认为你说的很对 |
|
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
42.969ms |