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

九大捕快

九大捕快

2016-02-19 13:05

今天给大家分享的是由图老师小编精心为您推荐的合并两个带头结点的有序循环链表合并为一个带头结点的有序循环链,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!
#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);       //打印最后结果
  }
  
展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
合并两个带头结点的有序循环链表合并为一个带头结点的有序循环链

如何把多个Word文档合并为一个

办公软件
如何把多个Word文档合并为一个

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

将Word2018中多个文档合并为一个

word
将Word2018中多个文档合并为一个

循环链表实验

编程语言 网络编程
循环链表实验

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Linux系统下将多个文件内容合并为一个文件的方法

服务器
Linux系统下将多个文件内容合并为一个文件的方法

如何比较并合并两个 PowerPoint 2010 文档?

电脑入门
如何比较并合并两个 PowerPoint 2010 文档?

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

解决Windows7下爆音 杂音问题

解决Windows7下爆音 杂音问题

Jquery 动态添加按钮实现代码

Jquery 动态添加按钮实现代码
下拉加载更多内容 ↓