小弟初学数据结构,很多算法设计思想都不懂。今天看书,有个题不知道怎样设计算法,请大家帮帮忙。
题目:
设已有一个单循环链表,结点有三个域,pre 、data、next ,请设计一个算法,把此链表改为一个双向循环 的链表。 |
#include<stdio.h>
#include<malloc.h>
typedef struct LNode{
struct LNode *pree;
int data;
struct LNode *next;
}LNode,*List;
void InitList(List &L)
{
L=(List)malloc(sizeof(LNode));
L->pree=0;
L->next=L->pree;
}
void DuList(List L)//改为双向循环链表
{
List x,y;
x=y=L;
while(x->next)
{
x=y->next;
x->pree=y;
y=x;
}
}
void Greate(List &L)
{
L=(List)malloc(sizeof(LNode));
L->pree=0;
L->next=0;
List p,q;q=L;
for(int i=0;i<5;i++)
{
p=(List)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=q->pree;
q->next=p->pree;
q=p;
}
}
void main()
{
List L;
InitList(L);
Greate(L);
DuList(L);
for(int i=0;i<5;i++)//正向输出链表
{
printf("%d",L->next->data);
L->next=L->next->pree;
}
for(int j=0;j<5;j++)//反向输出链表
{
printf("%d",L->pree->data);
L->pree=L->pree->next;
}
}
楼上的前辈,能帮我看看那出错了吗?非常感谢
#include<stdio.h>
#include<malloc.h>
typedef struct LNode{
struct LNode *pree;
int data;
struct LNode *next;
}Node;
Node *DuList(Node *L)
{
Node *x,*y;
x=y=L;
while(x->next)
{
x=y->next;
x->pree=y;
y=x;
}
return(L);
}
main()
{
Node *L=NULL,*p,*q;
int i;
while(1)
{
p=(Node*)malloc(sizeof(Node));
p->pree=p->next=NULL;
scanf("%d",&p->data);
if(p->data==-1) break;
if(L==NULL)
L=q=p;
else
{
q->next=p;
q=p;
}
}
p=L;
while(p)
{
q=p;
printf("%d ",p->data);
p=q->next;
}
L=DuList(L);
printf("\n");
while(q)
{
p=q;
printf("%d ",q->data);
q=q->pree;
free(p);
}
getch();
}
这是我写的.不局限输入5个数..可以输入任意个数.遇到-1结束
[此贴子已经被作者于2006-5-20 13:30:39编辑过]
错在下面这个函数上
void Greate(List &L)
{
L=(List)malloc(sizeof(LNode));
L->pree=0;
L->next=0;
List p,q;q=L;
for(int i=0;i<5;i++)
{
p=(List)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=q->pree;//这两句有严重的问题,假设p->next=r,那么q->pree=r,也就是说p的下一个接点和q的上一个接点都是r,pq根本不相临,中间隔了个r,不能构成链表
q->next=p->pree;//这句和上面一样的问题
q=p;
}
}
上面的函数是用来创建双链表的,按照题目的意思,这个函数是用来创建单链表的,不是双链表.用下面这个函数代替就好了.
void Greate(List &L)
{
L=(List)malloc(sizeof(LNode));
L->pree=0;
L->next=0;
List p,q;q=L;
for(int i=0;i<5;i++)
{
p=(List)malloc(sizeof(LNode));
scanf("%d",&p->data);
q->next=p;
q=p;
}
}
如果要创建双链表,如下
void Greate(List &L)
{
L=(List)malloc(sizeof(LNode));
L->pree=0;
L->next=0;
List p,q;q=L;
for(int i=0;i<5;i++)
{
p=(List)malloc(sizeof(LNode));
scanf("%d",&p->data);
q->next=p;
p->pree=q;
q=p;
}
我的VC出了点问题, 没法调试, 你去试试, 有问题再说.
[此贴子已经被作者于2006-5-20 13:43:24编辑过]