双向循环链表:C++ 双向循环链表的操作和实现



//    双向循环链表操作和实现...
// 网上有关这方面挺多由于自己以前上课没好好学数据结构现在重新认识数据结构
// 以下是自己写基于C双向循环链表创建及其些操作和实现(于VC下通过)没用模板
// 也没用类所以比较适合有点C语言基础入门者,但可移植不够.有什么bug话,欢迎指出
// 或有什么问题也可以联系我
// made by virgil (2009.2.8)
// MSN:[email protected])
# <iostream>
# <cstdlib>
using std;

N=10;
struct Node
{
char name[20];
Node *llink,*rlink;
};

Node* Create( n)
{
Node *h,*p,*s; //h:头结点p:下结点s:当前结点
i;
((h= Node)NULL)
{
cout<<"分配内存失败..."<<endl;
}
h->name[0]=0;
h->llink=NULL;
h->rlink=NULL;
p=h;
for (i=0;i!=n;i)
{
((s= Node)NULL)
{
cout<<"分配内存失败..."<<endl;
}
p->rlink=s;
cout<<"请输入第"<<i+1<<"个人姓名:";
cin>>s->name;
s->llink=p;
s->rlink=NULL;
p=s;
}
s->rlink=h;
h->llink=s;
h;
}
Node* Search(Node* h,const char* name)
{
Node *p=h->rlink;
for ( i=0;i!=N;i)
{
(strcmp(p->name,name)0)
{
p;
}
p=p->rlink;
}
p;
}
void Insert(Node *p)
{
Node *s= Node;
cout<<"请输入要插入姓名:";
cin>>s->name;
Node *r=p->rlink; //结点示意 p->s->r(s为插入结点)
p->rlink=s;
s->llink=p;
r->llink=s;
s->rlink=r;
N;
}
void Delete(Node *p)
{
Node *l=p->llink; //结点示意 l->p->r (p为要删除结点)
Node *r=p->rlink;
l->rlink=r;
r->llink=l;
delete p;
--N;
}
void Display(Node *h)
{
Node *p;
p=h->rlink;
for ( i=0;i!=N;i)
{
cout<<"第"<<i+1<<"个人姓名:"<<p->name<<endl;
// delete p;
p=p->rlink;
}
}


{
Node *head,*pSearch;
number=N;
char strName[20];
head=Create(number);
cout<<endl;

cout<<"你创建结构如下:"<<endl;
Display(head);
cout<<endl;


//查找并插入...
cout<<"请输入你要查找姓名:";
cin>>strName;
pSearch=Search(head,strName);
cout<<"你所要查找姓名是: "<<pSearch->name<<endl;
cout<<endl;
Insert(pSearch);
cout<<"插入后结果如下:"<<endl;
Display(head);
cout<<endl;

//查找并删除...
cout<<"输入你要删除结点: ";
cin>>strName;
pSearch=Search(head,strName);
Delete(pSearch);
cout<<"删除后结果如下:"<<endl;
Display(head);
cout<<endl;
0;
}

Tags:  双向可控硅 判断循环链表 循环链表 双向循环链表

延伸阅读

最新评论

发表评论