[爆卦]堆疊c是什麼?優點缺點精華區懶人包

為什麼這篇堆疊c鄉民發文收入到精華區:因為在堆疊c這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者Makoto0813 (bitch不太準怎辦)看板C_and_CPP標題[問題] C語言的堆疊p...

堆疊c 在 2A食旅日記?Amber&Andy?台中/台北/彰化美食 Instagram 的最讚貼文

2021-09-24 02:12:10

【#台中美食 #2度CNiGuo 】詳文google 2A食旅日記 - 台中千層蛋糕推薦!位在西屯區逢甲夜市裡的「2度C Ni Guo」是來自后里「倪菓幽靈」的分店,「2度C Ni Guo」菜單主打多種口味的平價千層蛋糕,每片蛋糕只要$110元起,價格真的很平價,而且在公益路也買得到!「2度C Ni...


我看過兩種版本,內容有所不同,
一個是蘇維雅譯的Horowitz的Fundamentals of Data Structures in C 的中譯本
另一個是我之前自學C語言時買的柴田望洋寫的明?C語言教學手冊 博碩文化

Fundamentals of Data Structures in C中的內容如下:
void add(int *top, element item)
{
/*add an item to the global stack*/
if (*top>=MAX_STACK_SIZE-1){
stack_full();
return;
}
stack[++*top]=item;
}

element delete(int *top)
{
/*return the top element from the stack*/
if(*top=-1)
return stack_empty(); /*return an error key*/
return stack[(*top)--];
}


然後明解C語言教學手冊的堆疊程式碼範例節錄如下
/*--- 對堆疊push資料 ---*/
int StackPush(Stack *s, int x)
{
if (s->ptr >= s->max) /* 堆疊已經滿了 */
return (-1);
s->stk[s->ptr++] = x;
return (0);
}

/*--- 從堆疊將資料pop出來 ---*/
int StackPop(Stack *s, int *x)
{
if (s->ptr <= 0) /* 堆疊是空的 */
return (-1);
*x = s->stk[--s->ptr];
return (0);
}

這兩種一個是在push時++運算在指標之前 另一個是在指標之後
在pop時 --運算一個在指標之後,一個在指標之前

就我個人的理解在pop時應是先將top指標所指的物件值輸出,再作--運算
而push是先將top指標向前一格,再將值複製入指標所指位置,所以應該是
Horowitz的比較合理,但是實際時作明解C的程式碼之後,也沒什麼問題

而且在補習班資結題目解答中也有看過這樣的寫法,跟明解C語言的很像

void push(int element){
if(IsFull())StackFull();
stack[top++];
}

void pop(){
if(IsEmpty()){StackEmpty();return-1;}
element=stack[--top]
}


請問為什麼這兩種寫法可以互通?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.67.195.135
※ 編輯: Makoto0813 來自: 203.67.195.135 (03/26 17:09)
LPH66:你可以仔細看兩種寫法 前一種初始化是 -1 後一種是 0 03/26 17:11
LPH66:也就是 前一種的 stack pointer 指在資料上 03/26 17:11
LPH66: 後一種的 stack pointer 指在資料下一格 03/26 17:12
LPH66: 前一種的新資料放在 stack pointer 下一格 03/26 17:12
LPH66: 後一種的新資料放在 stack pointer 上 03/26 17:12
LPH66:這樣再去理解它的 ++ -- 和取值的先後順序就知道為何都通了 03/26 17:13
Makoto0813:原來是這樣,這困擾我好久,感謝 03/26 17:19

你可能也想看看

搜尋相關網站