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
}