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;
}
相关推荐
涛ing1 小时前
32. C 语言 安全函数( _s 尾缀)
linux·c语言·c++·vscode·算法·安全·vim
xrgs_shz2 小时前
MATLAB的数据类型和各类数据类型转化示例
开发语言·数据结构·matlab
独正己身2 小时前
代码随想录day4
数据结构·c++·算法
我不是代码教父4 小时前
[原创](Modern C++)现代C++的关键性概念: 流格式化
c++·字符串格式化·流格式化·cout格式化
利刃大大5 小时前
【回溯+剪枝】找出所有子集的异或总和再求和 && 全排列Ⅱ
c++·算法·深度优先·剪枝
子燕若水5 小时前
mac 手工安装OpenSSL 3.4.0
c++
来恩10035 小时前
C# 类与对象详解
开发语言·c#
*TQK*5 小时前
ZZNUOJ(C/C++)基础练习1041——1050(详解版)
c语言·c++·编程知识点
komo莫莫da5 小时前
寒假刷题Day19
java·开发语言