中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

以c++的方式實現單鏈表

發布時間:2020-06-20 13:59:31 來源:網絡 閱讀:337 作者:劉子蛋gogogo 欄目:編程語言

  之前用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;
		}
	}
}

  

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扎赉特旗| 鄂州市| 宜城市| 勐海县| 石景山区| 康定县| 叙永县| 明光市| 镇赉县| 浦县| 香河县| 资源县| 长治县| 丘北县| 怀远县| 金昌市| 巢湖市| 南溪县| 洪洞县| 凤阳县| 余干县| 宣恩县| 金堂县| 景洪市| 宜宾县| 邵阳市| 京山县| 多伦县| 宜兰县| 华蓥市| 章丘市| 漾濞| 松潘县| 东明县| 固阳县| 巴里| 屏山县| 常山县| 仁布县| 吉林省| 黑水县|