设为首页 加入收藏

TOP

C++栈学习――赋值运算法的重载
2015-11-21 01:37:18 来源: 作者: 【 】 浏览:0
Tags:学习 算法 重载

对于编程,向来都是编的少,看的多,这种错误的学习方法一直延续至今,所以像运算符重载这么简单的东西,还是不太熟,今天借着学习栈的机会,自己写了一下链栈中赋值运算符的重载函数,写完之后对比了一下教材(《数据结构C++语言描述》任燕版),发现自己真是有种简单问题复杂化的天赋——写程序按部就班,不会优化。顺便发现了教材中一个小小的错误,在此加以纠正。

链栈赋值运算符的重载(自己写的重载函数)
说明一下自己的函数:想要实现不管左值链栈是不是为空,都能将右值链栈整个拷贝过来,所以整体思路就是:首先赋值两个链栈的公共部分的值,接着分为两种情况:(a)左值链栈元素个数小于右值链栈元素个数;(b)左值链栈元素个数大于右值链栈元素个数。
template
   
     Linkstack 
    
      Linkstack
     
      ::operator = (Linkstack 
      
        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; }
      
     
    
   
链栈赋值运算符的重载(《数据结构C++语言描述》任燕版)
看完作者的程序之后,觉得很汗颜,明明可以先将左值链栈清空,然后按照一种情况来拷贝呢,为啥就是想不到呢?哎,愚蠢之极。作者的代码如下:
template
    
      Linkstack 
     
       Linkstack
      
       ::operator = (Linkstack 
       
         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; }
       
      
     
    
纠正一个错误
但是,作者的代码中存在一个小小的错误,即没有对指针p进行初始化,修改后程序如下:
template
     
       Linkstack 
      
        Linkstack
       
        ::operator = (Linkstack 
        
          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; }
        
       
      
     
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Hadoop应用之顺序链接 下一篇【数据结构】-串

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: