0
点赞
收藏
分享

微信扫一扫

C++实现一个简单的链表栈

夕颜合欢落 2022-02-09 阅读 57

C++实现一个简单的链表栈

/**---------------------------------------
* 文件名称: CLinkStack.h
* 功能描述: 链表栈实现
* 创建标识: xad 2022/2/9
*
* 修改标识:
* 修改描述:
------------------------------------------**/

#ifndef CLINKSTACK_LINKSTACK_H
#define CLINKSTACK_LINKSTACK_H

namespace Algo03
{
	// 链式栈的结点
	typedef struct LINKNODE {
		struct LINKNODE* _pNext;
	}LinkNode;


	class ClinkStack
	{
	private:
		LinkNode	_pHead;		//头节点
		int			_nSize;		//栈结点个数
	public:
		ClinkStack();
		~ClinkStack();

		/**
		*  @brief    入栈
		*
		*  @param    LinkNode * data
		*  @return   void
		*/
		void push_linkStack(LinkNode* data);

		/**
		*  @brief    出栈
		*
		*  @return   void
		*/
		void pop_linkStack();

		/**
		*  @brief    返回栈顶元素
		*
		*  @return   Algo03::LinkNode*
		*/
		LinkNode* top_linkStack() const;

		/**
		*  @brief    返回栈元素个数
		*
		*  @return   int
		*/
		int get_size()const;

		/**
		*  @brief    清空栈
		*
		*  @return   void
		*/
		void clear_linkStack();
	};

}

#endif
#include "CLinkStack.h"
#include <iostream>

using namespace Algo03;

const int MATH_ZERO = 0;

Algo03::ClinkStack::ClinkStack()
{
	_pHead._pNext = nullptr;
	_nSize = 0;
}

Algo03::ClinkStack::~ClinkStack()
{
	//没有内存不需要释放
	std::cout << "free CLinkStack" << std::endl;
}

void Algo03::ClinkStack::push_linkStack(LinkNode * data)
{
	if (data == nullptr)
	{
		return;
	}

	data->_pNext = _pHead._pNext;
	_pHead._pNext = data;
	++_nSize;
}

void Algo03::ClinkStack::pop_linkStack()
{
	if (_nSize == MATH_ZERO)
	{
		return;
	}

	auto* pCurrent = _pHead._pNext;
	_pHead._pNext = pCurrent->_pNext;
	--_nSize;
}

LinkNode * Algo03::ClinkStack::top_linkStack() const
{
	if (_nSize == MATH_ZERO)
	{
		return nullptr;
	}

	return _pHead._pNext;
}

int Algo03::ClinkStack::get_size() const
{
	return _nSize;
}

void Algo03::ClinkStack::clear_linkStack()
{
	if (_nSize == 0)
	{
		return;
	}

	_pHead._pNext = nullptr;
	_nSize = 0;
}

#include <iostream>
#include "CLinkStack.h"

using namespace std;
using namespace Algo03;

void test_04(void);

typedef struct PERSON {
	LinkNode node;
	char name[64];
	int age;
}Person;

int main()
{
	test_04();
	system("pause");
	return 0;
}

void test_04()
{
	// 创建栈
	Algo03::ClinkStack stack;

	// 创建数据
	Person p1, p2, p3, p4, p5;
	strcpy_s(p1.name, "aaa");
	strcpy_s(p2.name, "bbb");
	strcpy_s(p3.name, "ccc");
	strcpy_s(p4.name, "ddd");
	strcpy_s(p5.name, "eee");

	p1.age = 10;
	p2.age = 20;
	p3.age = 30;
	p4.age = 40;
	p5.age = 50;

	// 入栈
	stack.push_linkStack((LinkNode*)&p1);
	stack.push_linkStack((LinkNode*)&p2);
	stack.push_linkStack((LinkNode*)&p3);
	stack.push_linkStack((LinkNode*)&p4);
	stack.push_linkStack((LinkNode*)&p5);

	while (stack.get_size() > 0) {
		// 取出栈顶元素
		auto *p = (Person *)stack.top_linkStack();
		std::cout << "Name:" << p->name << " Age:" << p->age << std::endl;
		// 弹出栈顶元素
		stack.pop_linkStack();
	}

	// 自动析构,销毁stack

}
举报

相关推荐

0 条评论