[問題] 練習stack結構 資料顯示問題
開發平台(Platform): (Ex: Win10, Linux, ...)
WIN XP
問題(Question):
分別
手動加入元素 item0~3
以及for迴圈
自動加入元素到stack
用for迴圈加入的元素
感覺怪異
不知道哪邊想錯了
預期的正確結果(Expected Output):
item=test0
item=test1
item=test2
item=test3
item=test4
item=test5
item=test6
item=test7
s1.length=7
test0
test1
test2
test3
test4
test5
test6
test7
錯誤結果(Wrong Output):
item=test0
item=test1
item=test2
item=test3
item=test4
item=test5
item=test6
item=test7
s1.length=7
test0
test1
test2
test3
test7
test7
test7
test7
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
完整程式
https://pastebin.com/sHABbnTi
部份程式
void Push(StackADT *S,element item)
{
if(isFull(S))
printf("stack is full \n");
else
{
printf("item=%s\n",item);
S->stack[++(S->length)]=item;
}
}
int main()
{
//初始化STACK
StackADT s1;
s1.length=-1;
//手動加入stack元素
element item0;
item0.data="test0";
Push(&s1,item0);
element item1;
item1.data="test1";
Push(&s1,item1);
element item2;
item2.data="test2";
Push(&s1,item2);
element item3;
item3.data="test3";
Push(&s1,item3);
//自動加入stack元素
int j;
for(j=4;j<8;j++)
{
element item;
char buf[10];
sprintf(buf,"test%d",j);
item.data=buf;
Push(&s1,item);
}
//顯示stack目前長度
printf("s1.length=%d\n",s1.length);
//顯示stack內容
int i;
for (i=s1.length;i>=0;i--)
printf("%s\n",s1.stack[s1.length-i]);
return 0;
}
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.220.35.157
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1534225572.A.2A1.html
※ 編輯: gcmtw88 (61.220.35.157), 08/14/2018 13:51:44
→
08/14 14:07,
5年前
, 1F
08/14 14:07, 1F
→
08/14 14:08,
5年前
, 2F
08/14 14:08, 2F
在迴圈中
每次執行 都宣告一次 char buf[10];
我以為 每次都會重新給 buf新的記憶體空間
實際上不是這樣嗎?
※ 編輯: gcmtw88 (61.220.35.157), 08/14/2018 14:12:35
→
08/14 14:20,
5年前
, 3F
08/14 14:20, 3F
→
08/14 14:20,
5年前
, 4F
08/14 14:20, 4F
所以說 我for中的element item;
每次迴圈 item都是取用同一塊記憶體?
怎嚜記得 宣告一次 就會取新的一塊記憶體
※ 編輯: gcmtw88 (61.220.35.157), 08/14/2018 14:29:38
→
08/14 14:35,
5年前
, 5F
08/14 14:35, 5F
好的 謝謝指教
那請問 想要把元素 for迴圈 推入stack
我應該用什麼方法
目前暫時沒想到怎麼傳遞不同字串
※ 編輯: gcmtw88 (61.220.35.157), 08/14/2018 14:38:29
→
08/14 14:52,
5年前
, 6F
08/14 14:52, 6F