算法与数据结构基础5:C++栈的简单实现
2014-12-04 00:52
369 查看
堆栈是基于队列的,只需要要稍微改一下就ok了,把代码贴在下面
// Stack.h
// main.cpp
// 输出截图
// Stack.h
#include <cstdio> #include <cassert> #include <iostream> using namespace std; class Stack { public: // ************************************************************************** // 类的四大函数:构造函数、拷贝构造函数、重载赋值运算符、析构函数 // ************************************************************************** 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_head; Node* m_tail; unsigned short m_size; }; // ************************************************************************** // 私有方法 // ************************************************************************** void Stack::Free() { if(m_head){ Node* tmp = NULL; while(m_head){ tmp = m_head; m_head = m_head->next; delete tmp; } } m_head = NULL; m_tail = NULL; m_size = 0; } // ************************************************************************** // 类的四大函数:构造函数、拷贝构造函数、重载赋值运算符、析构函数 // ************************************************************************** Stack::Stack() { m_head = NULL; m_tail = NULL; m_size = 0; } Stack::Stack(const Stack &Stack) { m_head = NULL; m_tail = NULL; m_size = Stack.m_size; if(Stack.m_head){ Node* tmp = Stack.m_head; Node* q = NULL; while(tmp){ Node* node = new Node(tmp->data); if(!m_head){ m_head = node; q = m_head; } else{ q->next = node; q = node; } tmp = tmp->next; } m_tail = q; } else{ m_head = NULL; m_tail = NULL; } } Stack& Stack::operator=(const Stack &Stack) { Free(); m_size = Stack.m_size; if(Stack.m_head){ Node* tmp = Stack.m_head; Node* q = NULL; while(tmp){ Node* node = new Node(tmp->data); if(!m_head){ m_head = node; q = m_head; } else{ q->next = node; q = node; } tmp = tmp->next; } m_tail = q; } else{ m_head = NULL; m_tail = NULL; } return *this; } Stack::~Stack() { if (m_head){ Node* tmp = m_head; while (tmp){ m_head = m_head->next; delete tmp; tmp = m_head; } } m_head = NULL; m_tail = NULL; } // ************************************************************************** // 增删改查 // ************************************************************************** void Stack::Push(const int& data) { Node* tmp = new Node(data); if (!m_head) { m_head = tmp; m_tail = tmp; } else{ tmp->next = m_head; m_head = tmp; } ++m_size; } int Stack::Pop() { assert(m_size > 0); Node* tmp = m_head; m_head = m_head->next; 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 : "; if (m_head){ Node* tmp = m_head; 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; }
// 输出截图
相关文章推荐
- 算法与数据结构基础7:C++双链表的简单实现
- 算法与数据结构基础3:C++单链表类的简单实现
- 【数据结构与算法】(四) c 语言静态队列的简单实现
- 【数据结构与算法】【排序】简单选择排序的代码实现
- 数据结构书中基于整数的简单排序Java实现,巩固一下基础
- 【数据结构与算法基础】以数组实现的循环队列 / Circular Queue implemented by array
- 【数据结构与算法】(三) c 语言栈的简单实现
- 算法与数据结构基础4:C++二叉树实现及遍历方法大全
- 【数据结构与算法】String 的简单实现
- 算法与数据结构基础8:C++实现有向图——邻接表存储
- ZH奶酪:【数据结构与算法】基础排序算法总结与Python实现
- 【数据结构与算法】(一) c 语言实现数组的简单操作
- 数据结构与算法——基数排序简单Java实现
- 数据结构基础 算法实现
- 【数据结构与算法】(六) c 语言实现简单的二叉树静态创建及先序、中序、后序遍历
- 算法:C语言实现 (第1-4部分)基础知识、数据结构……
- 【数据结构与算法】第三章 表c实现
- 【数据结构与算法】第三章 栈c实现,使用链表结构
- 【数据结构与算法基础】二叉查找树 / Binary Search Tree
- 算法与数据结构基础知识