回 帖 发 新 帖 刷新版面

主题:双链循环链表中的问题

#include"stdio.h"
typedef struct dulnode
{
int data;
struct dulnode *prior,*next;
}*dulinklist;
initlist(dulinklist *l)
{
*l=(dulinklist)malloc(sizeof(struct dulnode));
if(!(*l))
exit(0);
(*l)->next=(*l)->prior=*l;
return 1;
}
destroylist(dulinklist *l)
{
dulinklist p,q;
p=(*l)->next;
while(p!=*l)
{
q=p->next;
free(p);
p=q;
}
free(*l);
*l=NULL;
return 1;
}
listempty(dulinklist l)
{
if(l->next==l&&l->prior==l)
return 1;
else
return 0;
}
listlength(dulinklist l)
{
int i=0;
dulinklist p;
p=l->next;
while(p!=l)
{
p=p->next;
i++;
}
return i;
}
listinsert(dulinklist *l,int i,int e)
{
int j=0;
dulinklist p,s;
if(i<1||i>listlength(*l)+1)
return 0;
p=(*l)->next;
while(j<i)
{
p=p->next;
++j;
}
s=(dulinklist)malloc(sizeof(struct dulnode));
s->data=e;
s->prior=p;
s->next=p->next;
p->next->prior=s;
p->next=s;
return 1;
}
void main()
{
dulinklist l,q;
int i,j;
initlist(&l);
for(i=1;i<=5;i++)
{
listinsert(&l,i,i);
}
q=l->next;
while(q!=l)
{
printf("%d ",q->data);
getch();
q=q->next;
}
destroylist(&l);
}
本想输出12345
可实际输出15432
请大家看看




回复列表 (共1个回复)

沙发

关键在于你的listinsert函数有点小问题。就是在第i个位置后插入元素时,用p 找第i 个位置应该这样写:
int j=1;
p=(*l)->next;
while(j<i-1)
{
      p=p->next;
      ++j;
}
你将这两个地方改后试试,看结果对吗?

我来回复

您尚未登录,请登录后再回复。点此登录或注册