当前位置导航:炫浪网>>网络学院>>编程开发>>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 下一页 尾页 跳转到
相关内容
赞助商链接