以c++的方式实现单链表

  之前用c语言的方式实现过单链表,现在用c++的方式实现单链表。

为桓台等地区用户提供了全套网页设计制作服务,及桓台网站建设行业解决方案。主营业务为成都网站建设、网站建设、桓台网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

  以c++的类实现单链表,写完代码有了许多不一样的体会。感受到了两种语言的差异。

#include
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;
		}
	}
}

  


名称栏目:以c++的方式实现单链表
标题路径:http://scjbc.cn/article/jgegph.html

其他资讯