怎样建立一个空的双向循环链表?麻烦把算法写下~感激不尽~ 50

原题是这样的:创建一个空的双向循环链表statusCreateList_Dul(DuLinkList&L);完整的算法只怎样的呢?我这是数据结构的题... 原题是这样的:创建一个空的双向循环链表
status CreateList_Dul(DuLinkList &L);
完整的算法只怎样的呢?
我这是数据结构的题
展开
 我来答
纤尘如是
2008-10-04 · TA获得超过1万个赞
知道小有建树答主
回答量:395
采纳率:0%
帮助的人:647万
展开全部
这个程序包括建立双向链表和增删改差的完整功能,你看看是不是你想要的?

#include "stdafx.h"
#include "iostream.h"
#include "malloc.h"

/*创建长度为n的双向循环链表,值为整数。
查找第k个元素并输出。
删除所有值为m的元素。
逆置链表并输出。
*/

int n;
typedef struct str
{
int num;
struct str *pre;
struct str *next;
}node;

void creat(node * h)
{
node *c,*r;
r=h;
cout<<"输入链表的长度: ";
cin>>n;
for(int i=0;i<n;i++)
{
c=(node *)malloc(sizeof(node));
cout<<"输入数值: "<<endl;
cin>>c->num;
r->next=c;
c->pre=r;
r=c;
}
r->next=h->next;
h->next->pre=r;
}//..................

void select(node *h,int k)
{
node *p;
p=h->next;
if(k>n)
cout<<"errer."<<endl;
else
{
for(int i=1;i<k;i++)
{
p=p->next;
}
cout<<"第"<<k<<"个元素的值为: "<<p->num<<endl;
}
}

void Delete(node *h,int m)
{
node *p,*q;
q=h;
p=h->next;
while(p->next!=h->next)
{
if(h->next->num==m) //删除首结点
{
h->next=p->next;
p->pre->next=p->next;
p->next->pre=p->pre;
free(p);
p=q->next;

}
else if(p->num==m) //删除中间结点
{
q->next=p->next;
p->next->pre=q;
free(p);
p=q->next;
}
else
{
q=p;
p=p->next;
}

}
if(p->num==m) //删除尾结点
{
q->next=p->next;
p->next->pre=q;
free(p);
}
}

void nizhi(node *h)
{
node *t,*p;
h->next=h->next->pre; //把头结点只向尾结点
p=t=h->next;
for(int i=0;i<n;i++) //把前驱和后继掉换
{
t->next=p->next;
p->next=p->pre;
p->pre=t->next;
p=p->next;
}
}

void dep(node *h) //显示链表
{
node *p;
p=h->next;
cout<<"head->";
while(p->next!=h->next)
{
cout<<p->num<<"->";
p=p->next;
}
cout<<p->num;
cout<<"->head"<<endl;
}

void main()
{
node *h;
int k,m;
h=(node *)malloc(sizeof(node));
creat(h);
dep(h);
cout<<"输入查找的结点:";
cin>>k;
select(h,k);
cout<<"输入删除的值: ";
cin>>m;
Delete(h,m);
nizhi(h);
dep(h);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
写代码的卖鱼人
2008-10-04 · TA获得超过354个赞
知道小有建树答主
回答量:259
采纳率:100%
帮助的人:249万
展开全部
status CreateList_Dul(DuLinkList &L)
{
L->next = L;
L->pre = L;
return OK;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
何处淬吴钩
2008-10-04 · TA获得超过5043个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2376万
展开全部
Node *head;
Node *tail;
head->pre=tail;
head->next=tail;
tail->next=head;
tail->pre=head;
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
轻舞冰洋
2008-10-07 · TA获得超过1999个赞
知道小有建树答主
回答量:848
采纳率:0%
帮助的人:445万
展开全部
同学,重邮的吧~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式