当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

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

    #include<stdio.h>   //预编译命令
    #include<iostream.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:\n");
     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;
      cout<<k<<":"<<r->num<<endl;
      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->num>q->num)
      {
       r=q;
       q=q->next;
      }
      else
       break;
     }
     r->next=pNode;
     pNode->next=q;
    }

 

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接