之前用c语言的方式实现过单链表,现在用c++的方式实现单链表。

以c++的类实现单链表,写完代码有了许多不一样的体会。感受到了两种语言的差异。

#include<iostream>usingnamespacestd;classSlist{private:structNode{intdata;Node*pNext;};intsize;Node*pHead;Node*pTail;Node*ByeNode(int_data){Node*pNode=NULL;pNode=newNode;pNode->data=_data;pNode->pNext=NULL;returnpNode;}public:Slist(){pHead=NULL;pTail=NULL;size=0;}Slist(constSlist&my_Node){Node*pNode=(my_Node).pHead;for(inti=0;i<my_Node.size;i++){Pushback(pNode->data);pNode=pNode->pNext;}}~Slist();boolEmpty();Node*operator[](intindex){if((index<0)||(index>size-1))returnNULL;Node*pNode=pHead;for(inti=0;i<index;i++)pNode=pNode->pNext;returnpNode;}Slist&operator=(constSlist&my_Node){Clear();Node*pNode=my_Node.pHead;for(inti=0;i<my_Node.size;i++){Pushback(pNode->data);pNode=pNode->pNext;}return*this;}voidPushback(int_data);voidPopback();voidPushFront(int_data);voidPopFront();Node*Find(int_data){if(Empty())returnNULL;Node*pNode=pHead;while(pNode->pNext!=NULL){if(pNode->data==_data)returnpNode;pNode=pNode->pNext;}returnNULL;}voidErase(Node*DelNode){Node*pNode=pHead;while(pNode->pNext!=DelNode)pNode=pNode->pNext;pNode->pNext=pNode->pNext->pNext;deleteDelNode;DelNode=NULL;}voidClear(){if(Empty())return;while(size!=0){PopFront();}}voidsort();};Slist::~Slist(){while(!Empty()){size--;Node*pNode=pHead;pHead=pHead->pNext;deletepNode;pNode=NULL;}pTail=NULL;}voidSlist::Pushback(int_data){size+=1;Node*NewNode=ByeNode(_data);if(NULL==pHead){pHead=NewNode;pTail=NewNode;return;}pTail->pNext=NewNode;pTail=pTail->pNext;}voidSlist::Popback(){if(Empty()){cout<<"链表为空"<<endl;return;}if(size==1){size-=1;deletepHead;pHead=NULL;pTail=NULL;return;}size-=1;deletepTail;Node*pNode=pHead;while(pNode->pNext!=NULL)pNode=pNode->pNext;pTail=pNode;}voidSlist::PushFront(int_data){Node*NewNode=ByeNode(_data);if(pHead==NULL){pHead=NewNode;pTail=NewNode;size+=1;return;}Node*pNode=pHead;pHead=NewNode;pHead->pNext=pNode;size+=1;}voidSlist::PopFront(){if(Empty())return;if(1==size){deletepHead;pHead=NULL;pTail=NULL;return;}size-=1;Node*pNode=pHead;pHead=pHead->pNext;deletepNode;pNode=NULL;}boolSlist::Empty(){if(size==0)returntrue;returnfalse;}voidSlist::sort(){if(size<=1)return;Node*pNode=pHead;while(pNode->pNext!=NULL){if((pNode->data)>(pNode->pNext->data)){inttmp=pNode->data;pNode->data=pNode->pNext->data;pNode->pNext->data=tmp;pNode=pNode->pNext;}else{pNode=pNode->pNext;}}}