作者conan77420 (小馬非馬)
看板C_and_CPP
標題[問題] 關於linklist跟struct的問題
時間Tue Apr 28 20:13:27 2009
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
struct node
{
int data;
node *pnext;
};
//=================以上為struct==============
int data=0;
node *phead=0;
int count=0;
//================linklist資料差入===========
int insert(int data)
{
node *pnode=new node;
(*pnode).data=data;
(*pnode).pnext=0;
if(phead==0)
{phead=pnode;}
else
{ node *plast=new node;
plast=phead;
while((*plast).pnext!=0)
{plast=(*plast).pnext;}
(*plast).pnext=pnode;
}
}
//============================================
//==============將linklist中的值分別印出======
void print()
{
node *pnode=new node;
pnode=phead;
while(pnode!=0)
{
cout<<"Link list datais:"<<(*pnode).data<<endl;
pnode=(*pnode).pnext;
}
}
//============================================
int main()
{
while(1)
{
if(count==5)
{
print();
count=0;
}
cout<<"Enter data: ";
cin>>data;
insert(data);
count++;
}
system("pause");
}
//=======================================
小弟算是第一次碰linklist,
程式打一打也總算有對應的結果〈還沒用dalete〉
想請教的是:
1.在struct中定義的data宣告成int形式沒問題
,但為什麼在宣告指標時可以用不是保留字的
node來寫?這樣電腦怎麼知道要借多少記憶
體大小給我們呢?
2.在insert副程式中,為什麼不能將最後的
while((*plast).pnext!=0)
{plast=(*plast).pnext;}
(*plast).pnext=pnode;
改成
while(plast!=0)
{plast=(*plast).pnext;}
plast=pnode;
其實好像怪怪的,但我自己無法解釋,請教各位
謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.137.204
→ james732:1. 不管是什麼型別的"指標" 所花費的空間都是一定的 04/28 20:22
推 ledia:2. 你改出來的 plast 在出回圈時是 NULL, 又被設成 pnode 04/28 20:28
→ ledia: 跟他要把 plast 的 pnext 連到頭去的用意完全不同 04/28 20:28
→ conan77420:2.我懂了,那1.中node寫的用意是什麼? 04/28 20:41
推 snowlike:因為c++為你做了 typedef struct{...} node; 04/28 21:06
推 VictorTom:對了, (*pnode).xxxx 可以直接用 pnode->xxxx 就行了:) 04/28 21:57
→ conan77420:嗯,只是剛開始寫我覺得用指標比較促進思考XD謝謝大家~ 04/28 22:51
推 littleshan:你的 insert() 中有 memory leak 04/28 23:20
推 ledia:如果是放 struct node { node x; }; 就不行, 如你所說, 不 04/28 23:38
→ ledia:知道要放多少空間, 但是 struct node { node *p;}; 的時候 04/28 23:38
→ ledia:無論 struct node 長啥樣, node *p; 都是固定大小 04/28 23:39
→ ledia:所以可以允許這麼用 04/28 23:39