[問題] queue by circular link-list

看板C_and_CPP (C/C++)作者 (所以貓死了)時間16年前 (2009/05/06 23:05), 編輯推噓4(401)
留言5則, 3人參與, 最新討論串1/1
打算用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

05/06 23:47, , 1F
in=p; 是沒用的
05/06 23:47, 1F

05/06 23:48, , 2F
如果要改傳進去的指標本身, 請傳 NODE **in, 然後用 *in 改
05/06 23:48, 2F

05/06 23:56, , 3F
add return NODE*比較好...t=add(t,4) ..etc (in=p無用)
05/06 23:56, 3F

05/06 23:56, , 4F
in(->next)=p; 補上NODE()就不用malloc ~NODE()回收寫這
05/06 23:56, 4F

05/07 00:03, , 5F
把if,else刪掉,留else裡面的兩行也行,但要確保in!=NULL
05/07 00:03, 5F
文章代碼(AID): #1A0QSsx8 (C_and_CPP)
文章代碼(AID): #1A0QSsx8 (C_and_CPP)