求教:在c++中如何用类实现一个简单的单向链表??

如题所述

你是新手吧.如果是熟手决不会问出这种问题,因为STL(标准模板库)和MFC中的CList类都能自动实现链表功能.CMap类还能实现字典功能(例如用a代表第一个成员,b代表第二个成员).因此数据结构不要过多研究.
对于你说的实例在第一个Box的pnext先初始为0,但第二个Box一创建之后就得把他的地址装入第一个的pnext.我在学校时创建单链表的做法是建2个指针(p1,p2),建第一个对象时将地址装入这两个(p1,p2),建第二个对象后把地址装入p2的pnext,再执行p2=p2->pnext.建第三个对象时把地址装入p2的pnext,又执行p2=p2->pnext.以此类推.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-11-30
问题好乱!
一、getnext、setnext
这两个函数再明白不过了,设计者在类package中定义了一个package*
pnext;用来指向链表的下一个元素,getnext就是要取得下一个元素,自然返回该指针,setnext就是要给当前元素指定其下一个元素的地址,自然是给pnext赋值。
二、在创建第一个package对象时,pnext初始化为0,那么在创建第二个package对象时,第一个package对象中的pnext是如何指向它的(不是已经初始化为0了么?)?
看这段代码:
package*
ppackage=
new
package(pBox);
if
(pHead)
pTail->setnext(ppackage);
先创建第二个package对象,然后pTail->setnext(ppackage);
注意pTail永远指向链表的最后一个对象,因此pTail->setnext(ppackage);的意思是将第二个对象是放在了第一个对象的pnext中,也就将第一个对象和第二个对象链接起来了。
三、若把当次创建的package对象的地址ppackage赋予给pnext,那么pnext
不是指向刚刚创建的对象了么?好像并没有指向下一个package对象啊?
正如上面所说,setnext是把刚刚创建的对象放到当前链表最后一个元素的pnext成员里,在此之前,刚刚创建的对象还不在链表中,链表的最后一个元素是上次创建的那个。
四、还有到最后,如何使pnext为0?
你也说了,pnext在package创建的时候就赋值为0的,因此不需要再给最后一个package的pnext赋值0。
第2个回答  2019-06-19
class
a
{
typedef
struct
node
{
int
num;
int
score;
struct
node*
next;
}
node,*pnode;
public:
void
creatlist();
void
printlist();
pnode
head;
int
size;
};
void
a::creatlist()
{
pnode
p;
head=p=new
node;
p->next=null;
cout<<"链表建立!"<
>p->num>>p->score;
while(p->num)
//0
for
end
{
p=new
node;
p->next=head;
head=p;
cout<<"next
node
:"<
>p->num>>p->score;
}
}
void
a::printlist()
{
pnode
p=head;
while(p)
{
cout<<"序号:"<
num<<"分数:"<
score<
next;
}
}
void
main()
{
a
s;
s.creatlist();
s.printlist();
a::node
t;//在类外面使用就得这样
}
第3个回答  2019-08-16
class
a
{
typedef
struct
node
{
int
num;
int
score;
struct
node*
next;
}
node,*pnode;
public:
void
creatlist();
void
printlist();
pnode
head;
int
size;
};
void
a::creatlist()
{
pnode
p;
head=p=new
node;
p->next=null;
cout<<"链表建立!"<
>p->num>>p->score;
while(p->num)
//0
for
end
{
p=new
node;
p->next=head;
head=p;
cout<<"next
node
:"<
>p->num>>p->score;
}
}
void
a::printlist()
{
pnode
p=head;
while(p)
{
cout<<"序号:"<
num<<"分数:"<
score<
next;
}
}
void
main()
{
a
s;
s.creatlist();
s.printlist();
a::node
t;//在类外面使用就得这样
}
相似回答