作者ibonek (所以猫死了)
看板C_and_CPP
标题[问题] queue by circular link-list
时间Wed May 6 23:05:25 2009
打算用circular linked list实做queue
目前发现加入元素函式有问题,下面是程式码节录:
struct NODE
{
NODE(int value);
int dat;
NODE *next;
};
NODE::NODE(int value)
{
dat=value;
next=NULL;
}
void add(NODE *in,int value)
{
NODE *p;
p=(NODE *) malloc(sizeof(NODE));//产生新节点
p->dat=value;//给值
if(in->next==NULL){//若queue为空
p->next=p;
in=p;
}
else{
p->next=in->next;
in->next=p;
}
printf("%d %d %d %d|",in->dat
,in->next->dat
,in->next->next->dat
,in->next->next->next->dat);
}
main里面这样写:
NODE *t;
t=new NODE(-1);
add(t,4);
add(t,6);
add(t,8);
跑出来都只能找到最新插入的点
output:4 4 4 4|6 6 6 6|8 8 8 8
想了很多次不知道是哪边的逻辑有错误,有请大大们指正了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.221.219
1F:推 ledia:in=p; 是没用的 05/06 23:47
2F:→ ledia:如果要改传进去的指标本身, 请传 NODE **in, 然後用 *in 改 05/06 23:48
3F:推 evernever:add return NODE*比较好...t=add(t,4) ..etc (in=p无用) 05/06 23:56
4F:推 snowlike:in(->next)=p; 补上NODE()就不用malloc ~NODE()回收写这 05/06 23:56
5F:推 evernever:把if,else删掉,留else里面的两行也行,但要确保in!=NULL 05/07 00:03