之前用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;
}
}
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。