0
点赞
收藏
分享

微信扫一扫

C++实现一个简单的数组栈

C++实现一个简单的数组栈

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


#ifndef CSQESTACK_SEQSTACK_H
#define CSQESTACK_SEQSTACK_H

const int MAX_SIZE = 1024;

// 数组模拟堆栈的顺序存储
// 数组右侧作为栈顶,无需频繁移动元素

namespace Algo05
{
	class CSeqStack
	{
	private:
		void *		_pData[MAX_SIZE];  //存储元素数组
		int			_nSize;			//元素个数

	public:
		CSeqStack();
		~CSeqStack();

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

		/**
		*  @brief    返回栈顶元素
		*
		*  @return   void*
		*/
		void* top_seqStack();

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

		/**
		*  @brief    判断是否为空
		*
		*  @return   bool
		*/
		bool is_empty() const;

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

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

	};
}

#endif // !1

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

Algo05::CSeqStack::CSeqStack()
{
	for (auto & tmp : _pData)
	{
		tmp = nullptr;
	}

	_nSize = 0;
}

Algo05::CSeqStack::~CSeqStack()
{
	std::cout << " free CSeqStack" << std::endl;
}

void Algo05::CSeqStack::push_seqStack(void * data)
{
	if (data == nullptr)
	{
		return;
	}

	if (_nSize >= MAX_SIZE)
	{
		return;
	}

	_pData[_nSize++] = data;
}

void * Algo05::CSeqStack::top_seqStack()
{
	if (_nSize == 0)
	{
		return nullptr;
	}
	
	return _pData[_nSize - 1];
}

void Algo05::CSeqStack::pop_seqStack()
{
	if (_nSize == 0)
	{
		return;
	}

	_pData[_nSize - 1] = nullptr;
	_nSize--;
}

bool Algo05::CSeqStack::is_empty() const
{
	if (_nSize ==0)
	{
		return false;
	}
	return true;
}

int Algo05::CSeqStack::get_size() const
{
	return _nSize;
}

void Algo05::CSeqStack::clear_seqStack()
{
	if (_nSize == 0)
	{
		return;
	}

	for (int i = 0; i < _nSize; i++)
	{
		_pData[i] = nullptr;
	}
	_nSize = 0;
}

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

using namespace std;
using namespace Algo05;

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


void test_06(void);

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

void test_06(void)
{
	// 创建栈
	CSeqStack stack;

	//创建数据
	Person p1 = { "aaa", 10 };
	Person p2 = { "bbb", 20 };
	Person p3 = { "ccc", 30 };
	Person p4 = { "ddd", 40 };
	Person p5 = { "eee", 50 };

	// 入栈
	stack.push_seqStack(&p1);
	stack.push_seqStack(&p2);
	stack.push_seqStack(&p3);
	stack.push_seqStack(&p4);
	stack.push_seqStack(&p5);

	while (stack.get_size() > 0) {
		// 访问栈顶元素
		auto *person = (Person *)stack.top_seqStack();
		std::cout << "Name:" << person->name << " Age:" << person->age << std::endl;
		// 弹出栈顶元素
		stack.pop_seqStack();
	}

	// 析构函数调用,释放内存
}
举报

相关推荐

0 条评论