怎样建立一个空的双向循环链表?麻烦把算法写下~感激不尽~ 50
原题是这样的:创建一个空的双向循环链表statusCreateList_Dul(DuLinkList&L);完整的算法只怎样的呢?我这是数据结构的题...
原题是这样的:创建一个空的双向循环链表
status CreateList_Dul(DuLinkList &L);
完整的算法只怎样的呢?
我这是数据结构的题 展开
status CreateList_Dul(DuLinkList &L);
完整的算法只怎样的呢?
我这是数据结构的题 展开
展开全部
这个程序包括建立双向链表和增删改差的完整功能,你看看是不是你想要的?
#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);
}
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
status CreateList_Dul(DuLinkList &L)
{
L->next = L;
L->pre = L;
return OK;
}
{
L->next = L;
L->pre = L;
return OK;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Node *head;
Node *tail;
head->pre=tail;
head->next=tail;
tail->next=head;
tail->pre=head;
Node *tail;
head->pre=tail;
head->next=tail;
tail->next=head;
tail->pre=head;
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
同学,重邮的吧~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询