# 算法与数据结构基础5：C++栈的简单实现

// Stack.h

#include <cstdio>
#include <cassert>
#include <iostream>

using namespace std;

class Stack
{
public:
// **************************************************************************
// 类的4大函数：构造函数、拷贝构造函数、重载赋值运算符、析构函数
// **************************************************************************
Stack();
Stack(const Stack &Stack);
Stack& operator=(const Stack &Stack);
~Stack();

// **************************************************************************
// 增删改查
// **************************************************************************
void Push(const int& data);
int Pop();

unsigned short Size();
bool IsEmpty();
void PrintStack();

private:
void Free();

private:
typedef struct Node{
Node(int d):data(d),next(NULL){}
int data;
struct Node* next;
}Node;

Node* m_tail;
unsigned short m_size;
};

// **************************************************************************
// 私有方法
// **************************************************************************
void Stack::Free()
{
Node* tmp = NULL;
delete tmp;
}
}
m_tail = NULL;
m_size = 0;
}

// **************************************************************************
// 类的4大函数：构造函数、拷贝构造函数、重载赋值运算符、析构函数
// **************************************************************************
Stack::Stack()
{
m_tail = NULL;
m_size = 0;
}

Stack::Stack(const Stack &Stack)
{
m_tail = NULL;

m_size = Stack.m_size;

Node* q = NULL;
while(tmp){
Node* node = new Node(tmp->data);
}
else{
q->next = node;
q = node;
}
tmp = tmp->next;
}
m_tail = q;
}
else{
m_tail = NULL;
}
}

Stack& Stack::operator=(const Stack &Stack)
{
Free();

m_size = Stack.m_size;

Node* q = NULL;
while(tmp){
Node* node = new Node(tmp->data);
}
else{
q->next = node;
q = node;
}

tmp = tmp->next;
}
m_tail = q;
}
else{
m_tail = NULL;
}

return *this;
}

Stack::~Stack()
{
while (tmp){
delete tmp;
}
}
m_tail = NULL;
}

// **************************************************************************
// 增删改查
// **************************************************************************
void Stack::Push(const int& data)
{
Node* tmp = new Node(data);
m_tail = tmp;
}
else{
}
++m_size;
}

int Stack::Pop()
{
assert(m_size > 0);

int val = tmp->data;
delete tmp;
–m_size;

return val;
}

unsigned short Stack::Size()
{
return m_size;
}

bool Stack::IsEmpty()
{
return (m_size == 0);
}

void Stack::PrintStack()
{
cout << "size : " << m_size << " , content : ";
while (tmp){
cout << tmp->data << " -> ";
tmp = tmp->next;
}
}

cout << "NULL" << endl;
}

// main.cpp

// test for Stack
#include "Stack.h"
#include <cstdlib>
#include <iostream>
#include <list>

using namespace std;

int main()
{
Stack stack;
for (int i = 1; i < 5; ++i){
stack.Push(i);
}
stack.PrintStack();

Stack stackCopy(stack);
stackCopy.PrintStack();

Stack stackAssig;
stackAssig = stack;
stackAssig.PrintStack();

int pop = stack.Pop();
cout << "pop:" << pop << endl;
stack.PrintStack();

system("pause");

return 0;
}

// 输出截图

1. 本站所有资源来源于用户上传和网络，如有侵权请邮件联系站长！
2. 分享目的仅供大家学习和交流，您必须在下载后24小时内删除！
3. 不得使用于非法商业用途，不得违反国家法律。否则后果自负！
4. 本站提供的源码、模板、插件等等其他资源，都不包含技术服务请大家谅解！
5. 如有链接无法下载、失效或广告，请联系管理员处理！
6. 本站资源售价只是赞助，收取费用仅维持本站的日常运营所需！
7. 本站源码并不保证全部能正常使用，仅供有技术基础的人学习研究，请谨慎下载
8. 如遇到加密压缩包，请使用WINRAR解压,如遇到无法解压的请联系管理员！