论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

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

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:43:54

#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;
}

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\n");
 printf("If number is 0,stop inputing\n");
 printf("数据请从小到大输入\n");
 list1=creat();    //调用创建链表的函数
 print(list1);    //打印第一个链表


 printf("Input list2\n");
 printf("If number is 0,stop inputing\n");
 printf("数据请从小到大输入\n");
 list2=creat();   //调用创建链表的函数
 print(list2);   //打印第二个循环链表

 head=together(list1,list2);    //调用合并两个链表的函数
 printf("The new list is:\n");
 print(head);       //打印最后结果
}

上一篇:{实例}游戏封面欣赏 人气:7235
下一篇:{实例}我的"欢乐颂"面世了 人气:6080
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058