您好,登錄后才能下訂單哦!
之前用c語言的方式實現過單鏈表,現在用c++的方式實現單鏈表。
以c++的類實現單鏈表,寫完代碼有了許多不一樣的體會。感受到了兩種語言的差異。
#include<iostream> using 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; } } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。