合并两个带头结点的有序循环链表合并为一个带头结点的有序循环链

2016-02-19 13:05 124 1 收藏

今天给大家分享的是由图老师小编精心为您推荐的合并两个带头结点的有序循环链表合并为一个带头结点的有序循环链,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

【 tulaoshi.com - 编程语言 】

#includestdio.h   //预编译命令
  #includeiostream.h
  strUCt list//定义结构体
  {
   int num;
   list*next;
  };
  list*head,*end;         //定义全局变量list*creat()//创建链表的函数
  {
   list*p=NULL;
   list*q=NULL;
   head=NULL;
   int num;
   printf("Input number:");
   scanf("%d",&num);
   while(num!=0)
   {
    p=new list;      //开辟空间
    p-num=num;
    if(head==NULL)
     head=p;
    else
     q-next=p;
    q=p;
    scanf("%d",&num);
   }
   end=q;   //将链表的结尾最后一个结点赋给end
   end-next=head;  //让最后一个结点的的下个结点的地址不为空而指向头指针
   return(head);
  }void print(list*head)//打印循环链表的函数
  {
   int k=0;
   list*r=head;
   do
   {
    cout.width(2);
    k=k+1;
    coutk":"r-numendl;
    r=r-next;
   }while(r!=head);
  }void insert(list*pHead,list*pNode)   //插入接点的函数
  {
   list*q,*r;
   //第一种情况,链表为空
   if(pHead==NULL)
   {
    pHead=pNode;    //链表头指向pNode
    return;      //完成插入操作,返回
   } //第二种情况,pNode结点num的值小于链表头结点num的值
   //则将pNode的值插到链表头部
   if(pNode-num=pHead-num)
   {
    pNode-next=pHead;   
    pHead=pNode;    
    return;
   }
   //第三种情况,循环查找正确位置
   r=pHead;
   q=pHead-next;
   while(q!=pHead)
   {
    if(pNode-numq-num)
    {
     r=q;
     q=q-next;
    }
    else
     break;
   }
   r-next=pNode;
   pNode-next=q;
  }list*together(list*p1,list*p2)      //定义两个链表合并的函数
  {
   list*q,*r;
   q=p2;
   
   do
   {
    r=new list;   //开辟空间
    r-num=q-num;  //将q的值赋给r
    r-next=NULL;       //让r的下一个指针的地址为空,目的是使它成为一个独立的结点
    insert(p1,r);  //调用插入结点的函数
    q=q-next;   //指针向后拨一个接点
   }while(q!=p2);   //当在最后一个结点时停止循环
   return(p1);    //返回头指针
  }void main()   //主函数
  {
   list*list1,*list2;
   printf("Input list1");
   printf("If number is 0,stop inputing");
   printf("数据请从小到大输入");
   list1=creat();    //调用创建链表的函数
   print(list1);    //打印第一个链表
  
   printf("Input list2");
   printf("If number is 0,stop inputing");
   printf("数据请从小到大输入");
   list2=creat();   //调用创建链表的函数
   print(list2);   //打印第二个循环链表 head=together(list1,list2);    //调用合并两个链表的函数
   printf("The new list is:");
   print(head);       //打印最后结果
  }
  

来源:http://www.tulaoshi.com/n/20160219/1602949.html

延伸阅读
Maya 一个简单的方法去建立走路的循环周期      我们首先需要的是一个角色。这堂课上我们将用到 Mr.Stickman. 一般来说下面我们将需要简单而又清晰的一个方法。我收集的这些大多数是来自叫 Richard Williams 的 ”The Animator's from Richard” 一书。我们将用到 pose to pose 方法。我们以 24fps 运动,每步 12 桢。这主...
新收获,明白了一个方法 所谓的步长法, 不是简单地把指针+1或者+2, 而是指 一个 p1=p1->next 另一个 p2=p2->next->next(期间还要检查p2->next是不是null) 然后比较p1==p2 如果有任何一个到了NULL,则无循环 如果两个相等了,则有循环 如果不相等,则继续,直到上两种情况出现
两个好朋友,一个摄影计划   你也有和你臭味相投的摄影朋友吗?如果一起出外拍摄的话,通常会拍一些什么东西呢?或者你可以学习一下Silvia Sala及Freddy Viera这两个年轻人呢。他们透过网上摄影群组认识,甚至发现大家同住于Bergamo这个城市,虽然Silvia因为读书而暂住在Venice,但他们依然每个月一次相约出来拍摄,而由于两人都喜...
标签: 电脑入门
这种图片形式在许多场合都需要用到,而且也便于发送共享。 可以有以下两种较为简洁的方法,入门门槛为零。 方法一:使用MicrosoftXPSDocumentWriter 如果在安装Office的时候选择了完全安装,则在控制面板的打印机里可以看到一个MicrosoftXPSDocumentWriter(又名Microsoftofficedocumentimagewriter),用这个工具就可以将多个图片合并为一个x...
一个简单的链表模版类的实现 作者:Smoke 源代码下载     这是翻阅 《数据结构、算法与应用—— C++语言描述》 以及在网上得到的一些资料后写出来的。起因是在项目中要用到一个链表,但我做一个简单的链表在C++中用的时候跟C差别很多,比如赋值运算(编...

经验教程

966

收藏

97
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部