这篇文章主要讲解了C++如何实现单链表的构造,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
公司主营业务:网站制作、网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出株洲免费做网站回馈大家。单链表的构造,包括最常用函数,setData(),Insert(),Remove(),getData(),Search()。
代码如下:
#include#include using namespace std; template struct LinkNode{ T data; LinkNode *link; LinkNode(LinkNode *ptr=NULL){link=ptr;} LinkNode(const T& item, LinkNode *ptr=NULL){data=item; link=ptr;} }; template class List{ public: List(){first=new LinkNode ;} List(const T& x){first=new LinkNode (x);} List(List &L); ~List(){makeEmpty();} void makeEmpty(); int Length()const; LinkNode *getHead()const{return first;} LinkNode *Search(T x); LinkNode *Locate(int i); bool getData(int i, T &x)const; void setData(int i,T &x); bool Insert(int i,T &x); bool Remove(int i, T &x); bool IsEmpty()const{return (first->link==NULL)?true:false;} bool IsFull()const{ return false;} void Sort(); void inputFront(T endTag); void inputRear(T endTag); void output(); List & operator=(List &L); private: LinkNode *first; }; template void List ::makeEmpty(){ //if(first->link==NULL)return; LinkNode *p=first->link; while(p!=NULL){ first->link=p->link; delete p; p=first->link; } } template LinkNode *List ::Search(T x){ LinkNode *p=first->link; while(p!=NULL){ if(p->data==x)break; p=p->link; } return p;//无论是否找到都返回p,若找到则返回p,没有则返回空指针 } template LinkNode *List ::Locate(int i){ //这个定位函数的作用还是非常大的,方便后来的函数根据i定位到相应位置的节点 if(i<0)return NULL; int sum=0; LinkNode *p=first; while(p!=NULL&&sumlink; } return p;//无论是否为空指针,返回的都是到达i位置的指针,如果没有到达就是已经到结尾了 } template bool List ::getData(int i, T& x)const{ if(i<0)return false; LinkNode *p=Locate(i); if(p==NULL)return false; else{ x=p->data; return true; } } template void List ::setData(int i, T& x){ if(i<0)return; LinkNode *p=Locate(i); if(p==NULL)return; else{ p->data=x; } } template bool List ::Insert(int i, T &x){ //LinkNode *pre=Locate(i-1); //这里是指插入到第i个元素之后的情况 LinkNode *cur=Locate(i); if(cur==NULL)return false; LinkNode *p=new LinkNode (x); if(p==NULL){cerr<<"存储分配错误!"< link=cur->link; cur->link=p; return true; } } template bool List ::Remove(int i, T& x){ //删除第i个位置的元素 LinkNode *pre=Locate(i-1); if(pre==NULL)return false; LinkNode *current=pre->link; if(current==NULL)return false; x=current->data; pre->link=current->link; delete current; return true; } template void List ::output(){ LinkNode *current=first->link; while(current!=NULL){ cout< data<<" "; current=current->link; } } template List & List ::operator=(List & L){ //这是赋值方法 LinkNode *srcptr=L.getHead(), *p=srcptr->link; LinkNode *desptr=first=new LinkNode ; T value; while(p!=NULL){ value=p->data; desptr->link=new LinkNode (value); desptr=desptr->link; p=p->link; } return *this; //用上面这种方法可以更好地实现赋值 // LinkNode *pre=L.getHead(); // if(pre==NULL){ // first=NULL; // return *this; // } // LinkNode *p=first=new LinkNode ; // first->link=p; // int sum=L.Length(); // T &x; // int i=1; // while(i<=sum){ // L.getData(i++,x); // p=new LinkNode (x); // p=p->link; // } // return *this; } template int List ::Length()const{ int sum=0; LinkNode *p=first->link; while(p!=NULL){ sum++; first->link=p->link; delete p; p=first->link; } return sum; } //前插法建立单链表 template void List ::inputFront(T endTag){ LinkNode *newNode; T value; makeEmpty(); cin>>value; while(value!=endTag){ newNode=new LinkNode (value); if(newNode==NULL){cerr<<"内存分配错误!"< link=first->link; first->link=newNode; cin>>value; } } //后插法建立单链表 template void List ::inputRear(T endTag){ LinkNode *newNode=new LinkNode , *last; T value; last=first=new LinkNode ; cin>>value; while(value!=endTag){ newNode=new LinkNode (value); if(newNode==NULL){cerr<<""< link=newNode; last=newNode; cin>>value; } } //复制构造函数 template List ::List(List &L){ //复制构造函数 T value; LinkNode *srcptr=L.gethead(), p=srcptr->link; LinkNode *desptr=first->link=new LinkNode ; while(p!=NULL){ value=p->data; desptr=new LinkNode (value); desptr=desptr->link; p=p->link; } }
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。