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