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

    >> We choose to study algorithmic problems,  not because they are easy,  but because they are hard.
    [返回] 计算机科学论坛计算机理论与工程『 算法理论与分析 』 → 随机跳跃表如何复制? 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 8201 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 随机跳跃表如何复制? 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     neediss 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:58
      门派:XML.ORG.CN
      注册:2006/10/13

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给neediss发送一个短消息 把neediss加入好友 查看neediss的个人资料 搜索neediss在『 算法理论与分析 』的所有贴子 引用回复这个贴子 回复这个贴子 查看neediss的博客楼主
    发贴心情 随机跳跃表如何复制?

    如结构:
    struct List
    {
        int data;
        struct List* data;
        struct List* next;
    };
    其中next为下一个节点,data指向链表中的随机一个节点。
    实现拷贝函数:
    struct List * CopyList(struct List* head)
    {
    }
    要求返回一个新的链表,注意:1、新链表中节点的data指向新链表中对应节点,而
    非原链表中对应节点。2、不能用缓存(如数组等),可用临时变量。3、必须为O(
    n)

       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/10/13 22:54:00
     
     neediss 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:58
      门派:XML.ORG.CN
      注册:2006/10/13

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给neediss发送一个短消息 把neediss加入好友 查看neediss的个人资料 搜索neediss在『 算法理论与分析 』的所有贴子 引用回复这个贴子 回复这个贴子 查看neediss的博客2
    发贴心情 
    没人会?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/10/16 10:51:00
     
     aasdsds 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:2
      积分:64
      门派:XML.ORG.CN
      注册:2007/2/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给aasdsds发送一个短消息 把aasdsds加入好友 查看aasdsds的个人资料 搜索aasdsds在『 算法理论与分析 』的所有贴子 引用回复这个贴子 回复这个贴子 查看aasdsds的博客3
    发贴心情 
    这个做出来了
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/2/6 22:31:00
     
     aasdsds 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:2
      积分:64
      门派:XML.ORG.CN
      注册:2007/2/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给aasdsds发送一个短消息 把aasdsds加入好友 查看aasdsds的个人资料 搜索aasdsds在『 算法理论与分析 』的所有贴子 引用回复这个贴子 回复这个贴子 查看aasdsds的博客4
    发贴心情 
    1。复制 list->next;list->data
    2.  oldlist->data写入节点序号
    3.  按序号查找newlist中的地址
    4.  newlist->data重新赋给oldlist->data
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/2/6 22:36:00
     
     aasdsds 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:2
      积分:64
      门派:XML.ORG.CN
      注册:2007/2/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给aasdsds发送一个短消息 把aasdsds加入好友 查看aasdsds的个人资料 搜索aasdsds在『 算法理论与分析 』的所有贴子 引用回复这个贴子 回复这个贴子 查看aasdsds的博客5
    发贴心情 
    #include <stdlib.h>
    #include <stdio.h>
    #include <iostream>
    using namespace std;

    int lengthlist;
    struct randlist
    {
     int data;
     randlist * randnode;
     randlist * next;
    };
    randlist * setlist(int & length)//形成一个随机跳跃链
    {
     length=1;//计算链的长度
     char order;
     randlist * list;
        randlist * listhead;
     list = listhead = new randlist;
     while (length<100)
     {
      cout<<"第"<<length<<"节点数据是:";
      cin>>list->data;
      cout<<"此节点是否是最后一个(y/n):";
      cin>>order;
      while(order!='y'&&order!='Y'&&order!='n'&&order!='N')
      {
       cout<<"输入错误,请输入y或n";
       cin>>order;
      }
      if(order=='y'||order=='Y')
      {
       list->next =0;
       break;
      }
      if(order=='n'||order=='N')
      {
       list->next = new randlist;
       list = list->next;
       length++;
      }
     }
     list = listhead;
     randlist * listfind=listhead;
     for(int i=0;i<length;i++ )//产生随机跳跃点
     {
      int ranknum;//随机跳到第几个节点
      ranknum = rand()%length+1;
      for(int k=0;k<ranknum-1;k++)
      {
       listfind = listfind->next;
      }
      list->randnode =listfind;
      listfind =listhead;
      list =list->next;
     }
     return listhead;
    }
    int printlist(randlist* randhead)
    {
     randlist * rand;
     rand = randhead;
     cout<< randhead<<endl;
     for(int i =0;i<lengthlist;i++)
     {
      cout<<rand->data<<";"<<rand->randnode<<";"<<rand->next<<endl;
      rand = rand->next;
     }
     
     getchar();
     return 0;
    }
    randlist * copylist(randlist* randAhead)
    {
     int serial =0;
     randlist * randB,*randB2,*randBhead,*randA;
     randA = randAhead;
     randB = randB2 = randBhead = new randlist;
     while(1)//把A的数据存到B,数据区用作记录是第几个节点
     {
      randB->data = randA->data;
      randA->data = serial;
      if(randA->next!=0)
       {
        randB->next = new randlist;
        randB = randB->next;
        randA =randA->next;
        serial++;
       }
      else
       {
        randB->next=0;
        break;
       }
     }
     randA = randAhead;
     randB = randBhead;//新链表随机数的地址对应起来
     do
     {
      int num = randA->randnode->data;
      for ( int k=0 ;k<num;k++)
      {
       randB2 =randB2->next;
      }
      randB -> randnode = randB2;
      randB2 = randBhead;
      if(randA->next !=0)
      {
       randA = randA->next;
       randB = randB->next;
      }
      else
       break;
     }while(1);
     randA=randAhead;
     randB= randBhead;//把listA还原

     for (int i=0;i<lengthlist;i++)
     {
      randA->data = randB->data;
      randA = randA->next;
      randB = randB ->next;
     }  
     return randBhead;
    }
    int main(void)
    {
     randlist * oldlist,*newlist;

     oldlist = setlist(lengthlist);//传出链长度
     cout<<"the size is "<<lengthlist;
     newlist = copylist(oldlist);
     printlist(oldlist);
     printlist(newlist);
     return 0;
    }

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/2/6 22:38:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 算法理论与分析 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/5/10 12:22:06

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

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