[問題] 用串列實作堆疊的程式碼

看板C_and_CPP (C/C++)作者 (bitch不太準怎辦)時間16年前 (2010/03/31 20:49), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/1
遇到的問題: 看hrowitz的 Fundemental of data structure in C 的中譯本時遇到的問題 課本上的一則用串列實作堆疊的程式碼例子 void add(stack_pointer *top,element item) { stack_pointer temp=(stack_pointer)malloc(sizeof(stack)); if (IS_FULL(temp)){ fprintf(stderr,"The memory is full\n"); exit(1);} temp->item=item; temp->link=*top; *top=temp; } 我在想自己對指標的認識可能還是不太完全的,所以看到這個程式碼跟自己所想的 有些出入... 我本來覺得應該是這樣寫的: void add(stack_pointer *top,element item) { stack_pointer temp=(stack_pointer)malloc(sizeof(stack)); if (IS_FULL(temp)){ fprintf(stderr,"The memory is full\n"); exit(1);} temp->item=item; temp->link=top; top=temp; } 因為我覺得像是 top=temp 應該表示將temp所參照的位址只給top 但是top*=temp 而是將temp所參照的位址丟給top指到的物件stack吧 請問我哪裡搞錯了呢? 另外在宣告temp指標時,我一直以為只要是指標的宣告就要 有*號,可是這裡似乎是不用為什麼呢 另一個例子也一起問好了 這是要插入新節點到一個串列的範例 void insert(list_pointer *ptr,list_pointer node) /*這裡只有後面的指標沒有*號, 課本上說,因為後面的變數是call by value...但是指標不是只能傳位址進去嗎,怎麼 實作成call by value的呢?*/ { list_pointer temp; temp=(list_pointer)malloc(sizeof(list_node)); if(IS_FULL(temp)){ fprintf(stderr,"The memory is \n"); exit(1); } temp->data=50; if(*ptr){ temp->link=node->link; node->link=temp; } else{ /*若ptr所指的串列不存在*/ temp->link=NULL; *ptr=temp; } } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.104.233.17

03/31 21:35, , 1F
是不是應該要合理懷疑存在 #define satck_pointer satck*
03/31 21:35, 1F

03/31 21:36, , 2F
ta ta
03/31 21:36, 2F
前面是有這麼一段宣告: typedef struck stack *stack_pointer; typedef struck stack{ element item; stack_pointer link; }; stack pointer top; 請問多這段有幫助嗎 ※ 編輯: Makoto0813 來自: 59.104.233.17 (03/31 22:54)

03/31 22:54, , 3F
多加了一段內容下去了
03/31 22:54, 3F
文章代碼(AID): #1BiqJ9nd (C_and_CPP)
文章代碼(AID): #1BiqJ9nd (C_and_CPP)