[問題] 用串列實作堆疊的程式碼
遇到的問題:
看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
03/31 21:35, 1F
→
03/31 21:36, , 2F
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
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章