c++で単一チェーンテーブルを実現
以前はc言語で単一チェーンテーブルを実現していたが,現在は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;
}
}
}
本文は“劉子卵はよく勉強します”のブログから出て、転載して作者と連絡してください!