精華區beta C_and_CPP 關於我們 聯絡資訊
我看到個範例 有人可以幫我解釋一下嗎?? 因為有點不懂 #include <iostream> #include <cstdlib> using namespace std; struct stack { char val; struct stack* nex; } *top=NULL; void push(char); int main() { char input; cout << "請輸入一個字串:"; while((input=cin.get())!='\n') push(input); cout << "反轉字串:"; stack* pShow=top; while(pShow!=NULL) { cout << pShow->val; pShow=pShow->nex; } system("pause"); return 0; } void push(char value) { if(top==NULL) { stack* tmp=new stack; tmp->val=value; tmp->nex=NULL; top=tmp; } else { stack* tmp=new stack; tmp->val=value; tmp->nex=top; top=tmp; } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.112.218.8
aecho:@@ 哪裏不懂.... 11/08 13:16
mcdino:TMP->VAL=VALUE....有關全部NULL的地ꐠ 11/08 13:40
> -------------------------------------------------------------------------- < 作者: aecho (星空下的鮪魚) 看板: C_and_CPP 標題: Re: [問題] stack反字串 時間: Tue Nov 8 21:14:23 2005 ※ 引述《mcdino (親愛的呆諾)》之銘言: : 我看到個範例 有人可以幫我解釋一下嗎?? : 因為有點不懂 : #include <iostream> : #include <cstdlib> : using namespace std; : struct stack : { : char val; : struct stack* nex; : } *top=NULL; 一開始的top 是一個NULL 用 表示 .... 如果不是null的stack,用 表示 -> 表示連結 : void push(char); push在做的事情.... 1.當top為NULL的時候,建立一個stack塞入資料,然後尾巴指向NULL ==> -> ∣ ∣ top top 2.當top不是NULL的時候,同樣建一個stack塞入資料,然後尾巴指向舊的top, 並指向新的top -> ==> ->-> ∣ ∣ top top : void push(char value) : { : if(top==NULL) : { : stack* tmp=new stack; : tmp->val=value; : tmp->nex=NULL; : top=tmp; : } : else : { : stack* tmp=new stack; : tmp->val=value; : tmp->nex=top; : top=tmp; : } : } 接著來看main吧 : int main() : { : char input; : cout << "請輸入一個字串:"; : while((input=cin.get())!='\n') : push(input); 從上面應該可以看出來,input會成為一個 ->->->-> 這樣的結構 最後會指向一個null ∣ top : cout << "反轉字串:"; : stack* pShow=top; *pShow指向top 也就是最前面的那個 □ : while(pShow!=NULL) : { : cout << pShow->val; : pShow=pShow->nex; : } 讓pShow沿著->一個一個找到最後一個 那最後一個會是什麼呢... 就是尾巴 的前面那一個□ 所以當pShow 為NULL 就是沒東西了 這就是while裏面的條件 pShow != NULL 也是為什麼要先cout後 再用pShow=pShow->nex; 移位 : system("pause"); : return 0; : } -- 或許人生是一段整合內在的自己 並尋求人間一點真情的過程吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.167.214.33