新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 研友的交流园地,讨论关于计算机考研的方方面面。
    [返回] 计算机科学论坛计算机理论与工程『 计算机考研交流 』 → [求助]一道DS程序设计题 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 7069 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [求助]一道DS程序设计题 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     sunnylee 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(数据结构考了98分!)
      文章:63
      积分:374
      门派:XML.ORG.CN
      注册:2007/12/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给sunnylee发送一个短消息 把sunnylee加入好友 查看sunnylee的个人资料 搜索sunnylee在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看sunnylee的博客楼主
    发贴心情 [求助]一道DS程序设计题

    一道北邮的DS真题;
    某二叉树存储结构为:flag=0,1,2,lchild,rchild两个指针域;
    要求对二叉树不用堆栈、不用递归对其后序遍历,可以在不需要保留原树的情况下对其进行遍历。

       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/12/24 0:17:00
     
     hanshumin 帅哥哟,离线,有人找我吗?
      
      
      等级:大二(研究汇编)
      文章:37
      积分:238
      门派:XML.ORG.CN
      注册:2007/3/24

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hanshumin发送一个短消息 把hanshumin加入好友 查看hanshumin的个人资料 搜索hanshumin在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看hanshumin的博客2
    发贴心情 
    是不是穿线二叉树,如果是的,应该不是很难,关键是如何找到遍历的第一个节点,以及其之后的后继节点。这一点好象很多课本上有算法。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/12/24 11:19:00
     
     daizw 帅哥哟,离线,有人找我吗?
      
      
      等级:大二(研究C++)
      文章:51
      积分:303
      门派:XML.ORG.CN
      注册:2007/8/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给daizw发送一个短消息 把daizw加入好友 查看daizw的个人资料 搜索daizw在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看daizw的博客3
    发贴心情 
    以下是引用sunnylee在2007-12-24 0:17:00的发言:
    某二叉树存储结构为:flag=0,1,2,lchild,rchild两个指针域;

    flag是什么东东?

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/12/24 11:42:00
     
     chenminyi 帅哥哟,离线,有人找我吗?狮子座1984-7-28
      
      
      等级:大三(要不要学学XML呢?)
      文章:69
      积分:555
      门派:XML.ORG.CN
      注册:2006/7/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给chenminyi发送一个短消息 把chenminyi加入好友 查看chenminyi的个人资料 搜索chenminyi在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看chenminyi的博客4
    发贴心情 
    这个题以前好像讨论过,不用递归不用堆栈就只能用反链,反链只用一个link地域但可以实现双链表的功能。我以前上机验证过单链表反链的代码。基本思想就是这样的:
    ...<-front-<cur  rear->...
    游标向右操作是temp = rear; rear = rear->link; temp->link = cur; front = cur; cur = temp;
    游标向左操作是temp = cur; cur = front; front = front->link; temp->link = rear; rear = temp;
    还要注意处理最左端和最右端的情况,即front或rear为NULL的情况,你说的flag = 0|1|2,我想应该就是用来标记该结点是front,cur还是rear。
    树的反链操作比较复杂考试应该不会考,实现可以先做单链表的反链实现,然后树调用单反链的成员函数,这样不容易出错。北大习题指导上面好像也有反链实现的,不过没有划分出单链类,逻辑比较复杂看着比较吃力,你可以参考下~
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/12/24 13:33:00
     
     applestar 帅哥哟,离线,有人找我吗?
      
      
      威望:2
      等级:大四(总算啃完XML规范了)
      文章:101
      积分:1228
      门派:XML.ORG.CN
      注册:2007/3/16

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给applestar发送一个短消息 把applestar加入好友 查看applestar的个人资料 搜索applestar在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看applestar的博客5
    发贴心情 
    这类问题主要是采用逆转链法,主要用在内存空间管理,目的是节约空间浪费时间
    对于二叉树,广义表的遍历都可以采用,因为他们本质差别不大,注意的是遍历完之后
    还要把它逆转过来,清华大学以前的教材和北大以前的教材都有介绍
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/12/24 18:59:00
     
     chenminyi 帅哥哟,离线,有人找我吗?狮子座1984-7-28
      
      
      等级:大三(要不要学学XML呢?)
      文章:69
      积分:555
      门派:XML.ORG.CN
      注册:2006/7/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给chenminyi发送一个短消息 把chenminyi加入好友 查看chenminyi的个人资料 搜索chenminyi在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看chenminyi的博客6
    发贴心情 
    顺便说一下数据结构的问题,现在计算机内存不再紧缺,因此一些比较复杂的数据结构用的很少,特别单存为了节省存储空间而增加操作复杂性与稳定性的数据结构。
          记得以前看国防科大翻译的一本数据结构上面的课后习题,也是要求用单link地域实现双链表前向迭代和后向迭代功能,那个更巧妙。基本思想是 (a异或b)异或a = a异或(a异或b) = b这个基本公式。对于非bool值,应用C语言中的按位异或运算符上式也成立(要不是那个题,我都忘了还有^这个运算符,呵呵) 因此,可以在指针域中保存LeftLink异或RightLink,即front异或(front异或rear) = rear,这样可以从头结点开始前向遍历链表也可以从尾结点开始后向遍历链表,遍历过程中保存front或rear,与其指针域做异或运算便可得到下个结点的地址。
          上面的例子仅供大家消遣,这种数据结构很不稳定,异或出来的指针可能指向某非法位置,没人敢在工程中用这样的数据结构,呵呵~记得看算法导论的时候,里面的树一概都是有指向父结点的指针域的,而且从不用堆栈来模拟递归。我前几天写的Ackermann函数的非递归堆栈实现比用递归函数的实现慢了至少有一倍,用的是标准库的stack,难道stack比程序栈还要慢吗?~
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/12/24 22:37:00
     
     chenminyi 帅哥哟,离线,有人找我吗?狮子座1984-7-28
      
      
      等级:大三(要不要学学XML呢?)
      文章:69
      积分:555
      门派:XML.ORG.CN
      注册:2006/7/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给chenminyi发送一个短消息 把chenminyi加入好友 查看chenminyi的个人资料 搜索chenminyi在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看chenminyi的博客7
    发贴心情 
    以下是引用applestar在2007-12-24 18:59:00的发言:
    主要用在内存空间管理,目的是节约空间浪费时间

    这个好像浪费不了多少时间吧~每次指针右移或左移增加一个赋值操作,不影响时间复杂度大O估计。看操作系统的时候没见提过

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/12/24 23:02:00
     
     sunnylee 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(数据结构考了98分!)
      文章:63
      积分:374
      门派:XML.ORG.CN
      注册:2007/12/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给sunnylee发送一个短消息 把sunnylee加入好友 查看sunnylee的个人资料 搜索sunnylee在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看sunnylee的博客8
    发贴心情 
    以下是引用chenminyi在2007-12-24 13:33:00的发言:
    这个题以前好像讨论过,不用递归不用堆栈就只能用反链,反链只用一个link地域但可以实现双链表的功能。我以前上机验证过单链表反链的代码。基本思想就是这样的:
    ...<-front-<cur  rear->...
    游标向右操作是temp = rear; rear = rear->link; temp->link = cur; front = cur; cur = temp;
    游标向左操作是temp = cur; cur = front; front = front->link; temp->link = rear; rear = temp;
    还要注意处理最左端和最右端的情况,即front或rear为NULL的情况,你说的flag = 0|1|2,我想应该就是用来标记该结点是front,cur还是rear。
    树的反链操作比较复杂考试应该不会考,实现可以先做单链表的反链实现,然后树调用单反链的成员函数,这样不容易出错。北大习题指导上面好像也有反链实现的,不过没有划分出单链类,逻辑比较复杂看着比较吃力,你可以参考下~


    链表的反链到能明白,北大DS指导书上看过,不过树的反链不太明白,也不知道
    该怎样在后序中遍历应用。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/12/24 23:56:00
     
     buddha 帅哥哟,离线,有人找我吗?
      
      
      等级:大四(每天看1小时莱昂氏)
      文章:164
      积分:1022
      门派:XML.ORG.CN
      注册:2006/5/7

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给buddha发送一个短消息 把buddha加入好友 查看buddha的个人资料 搜索buddha在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看buddha的博客9
    发贴心情 
    还有一道类似题目。
    要求有父指针,左孩子指针,右孩子指针。遍历二叉树。
    要求不能用递归和堆栈。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/12/25 13:26:00
     
     sunnylee 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(数据结构考了98分!)
      文章:63
      积分:374
      门派:XML.ORG.CN
      注册:2007/12/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给sunnylee发送一个短消息 把sunnylee加入好友 查看sunnylee的个人资料 搜索sunnylee在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看sunnylee的博客10
    发贴心情 
    以下是引用buddha在2007-12-25 13:26:00的发言:
    还有一道类似题目。
    要求有父指针,左孩子指针,右孩子指针。遍历二叉树。
    要求不能用递归和堆栈。


    如果有父指针的话就会容易很多,而且用两个FLAG就可以实现。
    但只用三个FLAG真的好难啊。。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/12/25 13:33:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 计算机考研交流 』 的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/11 23:46:12

    本主题贴数12,分页: [1] [2]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    93.750ms