对于编程,向来都是编的少,看的多,这种错误的学习方法一直延续至今,所以像运算符重载这么简单的东西,还是不太熟,今天借着学习栈的机会,自己写了一下链栈中赋值运算符的重载函数,写完之后对比了一下教材(《数据结构C++语言描述》任燕版),发现自己真是有种简单问题复杂化的天赋——写程序按部就班,不会优化。顺便发现了教材中一个小小的错误,在此加以纠正。
template<typename ElemType>
Linkstack <ElemType> Linkstack<ElemType>::operator = (Linkstack <ElemType> rightS)
{
NodePointer rs,ls,s,r,p;
rs=rightS.top;
ls=top;
r=NULL;
if (this!=&rightS)
{
while (ls!=NULL&&rs!=NULL)//二者公共部分的赋值
{
ls->data=rs->data;
rs=rs->next;
r=ls;
ls=ls->next;
}
// 左值链栈元素个数小于右值链栈元素个数
while (ls==NULL&&rs!=NULL)
{
s=new(LinkNode);
assert(s!=0);
s->data=rs->data;
s->next=NULL;
rs=rs->next;
r->next=s;
r=r->next;
ls=NULL;
}
// 左值链栈元素个数大于右值链栈元素个数
while (ls!=NULL&&rs==NULL)
{
p=ls;
r->next=ls->next;
ls=ls->next;
delete p;
}
}
return *this;
}
template<typename ElemType>
Linkstack <ElemType> Linkstack<ElemType>::operator = (Linkstack <ElemType> rightS)
{
NodePointer p=NULL;
NodePointer rp=rightS.top;
NodePointer s;
if (this!=&rightS)
{
clear();
while (rp)
{
s=new(LinkNode);
assert(s!=0);
s->data=rp->data;
if (!top)
{
top=s;
}
else
{
p->next=s;
}
p=s;
rp=rp->next;
}
if (p)
p->next=NULL;
}
return *this;
}
template<typename ElemType>
Linkstack <ElemType> Linkstack<ElemType>::operator = (Linkstack <ElemType> rightS)
{
NodePointer p=NULL;
NodePointer rp=rightS.top;
NodePointer s;
if (this!=&rightS)
{
clear();
while (rp)
{
s=new(LinkNode);
assert(s!=0);
s->data=rp->data;
if (!top)
{
top=s;
p=top;/////////////////自己添加的指针初始化部分,否则,指针根本不知道移到哪里去了
}
else
{
p->next=s;
}
p=s;
rp=rp->next;
}
if (p)
p->next=NULL;
}
return *this;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/handsomewangjg/article/details/47976393