C++:用类实现链表,队列,栈

用类实现链表:

cpp 复制代码
#include<iostream>
using namespace std;

class List
{
	struct Node
	{
		int Nval;
		Node* pNext;
	};
private:
	Node* pHead = NULL;
	Node* pEnd = NULL;
public:
	void AddNode(int n);
	void DelNode(int n);
	void walk();
};
void List::AddNode(int k)
{
	Node* ptemp = new Node;
	ptemp->Nval = k;
	ptemp->pNext = NULL;
	if (NULL == pHead)
	{
		pHead = ptemp;
	}
	else
	{
		pEnd->pNext = ptemp;
	}
	pEnd = ptemp;
}
void List::DelNode(int n)
{
	Node* pdel = NULL;
	if (pHead->Nval == n)
	{
		pdel = pHead;
		pHead = pHead->pNext;
		free(pdel);
		pdel = NULL;
		return;
	}
	Node* pmark = pHead;
	while (pmark->pNext != NULL)
	{
		if (pmark->pNext->Nval == n)
		{
			pdel = pmark->pNext;
			pmark->pNext = pmark->pNext->pNext;
			free(pdel);
			pdel = NULL;
			if (pmark->pNext == NULL)
			{
				pEnd = pmark;
			}
			return;
		}
		pmark = pmark->pNext;
	}
}
void List::walk()
{
	while (pHead != NULL)
	{
		cout << pHead->Nval << endl;
		pHead = pHead->pNext;
	}
}

int main()
{
	List list;
	list.AddNode(1);
	list.AddNode(2);
	list.AddNode(3);

	list.DelNode(1);
	list.DelNode(2);
	list.walk();


	return 0;
}

用类实现队列:

cpp 复制代码
#include<iostream>
using namespace std;

class Queue
{
	struct Node
	{
		int Nval;
		Node* pNext;
	};
private:
	Node* pHead = NULL;
	Node* pEnd = NULL;
public:
	void Push(int n);
	int pop();

};
void Queue::Push(int n)
{
	Node* pTemp = new Node;
	pTemp->Nval = n;
	pTemp->pNext = NULL;

	if (pHead == NULL)
	{
		pHead = pTemp;
	}
	else
	{
		pEnd->pNext = pTemp;
	}
	pEnd = pTemp;
}
int Queue::pop()
{
	if (pHead != NULL)
	{
		Node* pdel = pHead;
		pHead = pHead->pNext;
		int n = pdel->Nval;
		free(pdel);
		pdel = NULL;
		if (NULL == pHead)
		{
			pEnd = NULL;
		}
		return n;
	}
	return -1;
}


int main()
{
	Queue yan;
	yan.Push(1);
	yan.Push(2);
	yan.Push(3);

	cout << yan.pop() << endl;
	cout << yan.pop() << endl;
	cout << yan.pop() << endl;


	return 0;
}

用类实现栈:

cpp 复制代码
#include<iostream>
using namespace std;

class List
{
	struct Node
	{
		int n;
		Node* pnext;
	};
private:
	Node* ptop = NULL;
public:
	void push(int n);
	int pop();
};
void List::push(int n)
{
	Node* ptemp = new Node;
	ptemp->n = n;
	ptemp->pnext = NULL;
	if (ptop != NULL)
	{
		ptemp->pnext = ptop;
		ptop = ptemp;
	}
	else
	{
		ptop = ptemp;
	}
}
int List::pop()
{
	if (ptop != NULL)
	{
		Node* pdel = ptop;
		ptop = ptop->pnext;
		int k = pdel->n;
		free(pdel);
		pdel = NULL;
		
		return k;
	}
	return -1;
}

int main()
{
	List k;
	k.push(1);
	k.push(2);
	k.push(3);

	cout << k.pop()<< endl;
	cout << k.pop() << endl;
	cout << k.pop() << endl;

	return 0;
}
相关推荐
java1234_小锋8 分钟前
一周学会Matplotlib3 Python 数据可视化-绘制自相关图
开发语言·python·信息可视化·matplotlib·matplotlib3
甄超锋10 分钟前
Java Maven更换国内源
java·开发语言·spring boot·spring·spring cloud·tomcat·maven
旺小仔.23 分钟前
双指针和codetop复习
数据结构·c++·算法
凢en40 分钟前
Perl——qw()函数
开发语言·perl
jingfeng51442 分钟前
C++ STL-string类底层实现
前端·c++·算法
郝学胜-神的一滴1 小时前
基于C++的词法分析器:使用正则表达式的实现
开发语言·c++·程序人生·正则表达式·stl
努力努力再努力wz2 小时前
【c++深入系列】:万字详解模版(下)
java·c++·redis
林开落L2 小时前
库的制作与原理
linux·开发语言·动静态库·库的制作
m0_480502643 小时前
Rust 入门 泛型和特征-特征对象 (十四)
开发语言·后端·rust
瓦特what?3 小时前
关于C++的#include的超超超详细讲解
java·开发语言·数据结构·c++·算法·信息可视化·数据挖掘