以c++的方式实现单链表
之前用c语言的方式实现过单链表,现在用c++的方式实现单链表。
为桓台等地区用户提供了全套网页设计制作服务,及桓台网站建设行业解决方案。主营业务为成都网站建设、网站建设、桓台网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
以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; } } }
本文标题:以c++的方式实现单链表
分享路径:http://hbruida.cn/article/jgegph.html