以c++的方式实现单链表-创新互联
之前用c语言的方式实现过单链表,现在用c++的方式实现单链表。
创新互联2013年至今,先为宜春等服务建站,宜春等地企业,进行企业商务咨询服务。为宜春企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。以c++的类实现单链表,写完代码有了许多不一样的体会。感受到了两种语言的差异。
#includeusing namespace std; class Slist { private: struct Node { int data; Node* pNext; }; int size; Node* pHead; Node* pTail; Node* ByeNode(int _data) { Node* pNode = NULL; pNode = new Node; pNode->data = _data; pNode->pNext = NULL; return pNode; } public: Slist() { pHead = NULL; pTail = NULL; size = 0; } Slist(const Slist& my_Node) { Node* pNode = (my_Node).pHead; for (int i = 0; i < my_Node.size; i++) { Pushback(pNode->data); pNode = pNode->pNext; } } ~Slist(); bool Empty(); Node* operator[](int index) { if ((index<0) || (index>size - 1)) return NULL; Node* pNode = pHead; for (int i = 0; i < index; i++) pNode = pNode->pNext; return pNode; } Slist& operator=(const Slist& my_Node) { Clear(); Node* pNode = my_Node.pHead; for (int i = 0; i < my_Node.size; i++) { Pushback(pNode->data); pNode = pNode->pNext; } return *this; } void Pushback(int _data); void Popback(); void PushFront(int _data); void PopFront(); Node* Find(int _data) { if (Empty()) return NULL; Node* pNode = pHead; while (pNode->pNext!=NULL) { if (pNode->data == _data) return pNode; pNode = pNode->pNext; } return NULL; } void Erase(Node* DelNode) { Node* pNode = pHead; while (pNode->pNext != DelNode) pNode = pNode->pNext; pNode->pNext = pNode->pNext->pNext; delete DelNode; DelNode = NULL; } void Clear() { if (Empty()) return; while (size != 0) { PopFront(); } } void sort(); }; Slist::~Slist() { while (!Empty()) { size--; Node* pNode = pHead; pHead = pHead->pNext; delete pNode; pNode = NULL; } pTail = NULL; } void Slist::Pushback(int _data) { size += 1; Node* NewNode = ByeNode(_data); if (NULL == pHead) { pHead = NewNode; pTail = NewNode; return; } pTail->pNext = NewNode; pTail = pTail->pNext; } void Slist::Popback() { if (Empty()) { cout << "链表为空" << endl; return; } if (size == 1) { size -= 1; delete pHead; pHead = NULL; pTail = NULL; return; } size -= 1; delete pTail; Node* pNode = pHead; while (pNode->pNext != NULL) pNode = pNode->pNext; pTail = pNode; } void Slist::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; } void Slist::PopFront() { if (Empty()) return; if (1 == size) { delete pHead; pHead = NULL; pTail = NULL; return; } size -= 1; Node* pNode = pHead; pHead = pHead->pNext; delete pNode; pNode = NULL; } bool Slist::Empty() { if (size == 0) return true; return false; } void Slist::sort() { if (size <= 1) return; Node* pNode = pHead; while (pNode->pNext != NULL) { if ((pNode->data) > (pNode->pNext->data)) { int tmp = pNode->data; pNode->data = pNode->pNext->data; pNode->pNext->data = tmp; pNode = pNode->pNext; } else { pNode = pNode->pNext; } } }
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享文章:以c++的方式实现单链表-创新互联
链接URL:http://scyanting.com/article/hjjji.html