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();
}
// 析构函数调用,释放内存
}