顯示廣告
隱藏 ✕
看板 TL
作者 TL (踢欸樓)
標題 [筆記][問題] stack反字串
時間 2013年01月27日 Sun. PM 06:22:10


看板 C_and_CPP
作者 mcdino (親愛的呆諾)
標題 [問題] stack反字串
時間 Tue Nov  8 12:18:28 2005


我看到個範例  有人可以幫我解釋一下嗎??
因為有點不懂
#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:@@  哪裏不懂....1F 11/08 13:16
mcdino:TMP->VAL=VALUE....有關全部NULL的地�2F 11/08 13:40

> -------------------------------------------------------------------------- <

看板 C_and_CPP
作者 aecho (星空下的鮪魚)
標題 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

--
Shaken, Not Stirred.
--
※ 作者: TL 時間: 2013-01-27 18:22:10
※ 看板: TL 文章推薦值: 0 目前人氣: 0 累積人氣: 24 
分享網址: 複製 已複製
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇