天天看点

数据结构 P35 算法实现 循环链表的创建与查找

#include<iostream>

using namespace std;

struct node            //创建节点

{

int date;

node *next;

};

int main()

{

node *head;               //创建头结点

head=NULL;

int x=1,y1=0;          //y1为判断链表现有长度的参数

node *p,*s;

while(x<9)              //自动创建数据为1-8的链表

{

s=new node();    //动态分配新的节点

s->date=x;        //给新节点的数据赋值

if(head==NULL) //如果没有头结点则将第一个新节点作为头结点

{ s->next=NULL;

p=head=s;}

else                  

{ s->next=head; //将新节点的下一个节点设为头结点

p->next=s;   //将新节点设为链表尾部的下一个节点

p=p->next;}

++x;++y1;}

cout<<"链表为:";        //打印链表

p=head;

cout<<p->date<<" ";        //打印头结点

p=p->next;                        //节点后移一个

for(;p!=head&&p!=NULL;p=p->next) //当节点不是头结点或者节点不为空(避免链表只有一个头结点)时打印该节点的数据,然后将节点后移一个

cout<<p->date<<" ";

cout<<endl;

while(1)                //在链表中查询存储该数据的节点的下一个节点所存储的数据

{

int y,y2=1; //y2为已遍历链表的长度

cin>>y;     //输入需要查询的节点

for(p=head;p->next!=head&&p->next!=NULL;p=p->next) //当节点的下一个节点不是头结点或者不为空时(避免链表只有一个头结点)执行查询程序,然后节点后移一位

{

if(y==p->date)  //当查询的数据与当前节点所存储的数据一致时 退出for循环

break;

++y2;

}

if(y1==y2) //若遍历链表查询不到所输入的数据

cout<<"链表中没有你所输入的数据!!!"<<endl;

else

{   p=p->next;

cout<<"下一个为:"<<p->date<<endl;}

}

return 0;

}