用c++封装的一个栈
2018-03-02 16:41
239 查看
stack.h
#ifndef STACK_H_INCLUDED #define STACK_H_INCLUDED /* --- 链栈 --- */ template <class T> struct Node{ // 定义结构体 T data; // 数据 struct Node *next; // 下一个节点 }; // 类模板 template <class T> class Stack{ // 类定义 public: // 默认构造器(定义变量的时候会执行) Stack<T>(){ head = new Node<T>; head->next = NULL; } ~Stack<T>(){ Destory(); } bool push(T data); // 入栈 T pop(); // 出栈 void Destory(); // 销毁 void Clear(); // 清空栈 bool isEmpty(); // 是否为空 private: Node<T> *head; // 头节点 }; template <class T> bool Stack<T>::push(T data){ Node<T> *newPt = new Node<T>; // 为新数据申请空间 // 若申请失败 返回false if(!newPt) return false; // 为新节点存入数据 newPt->data = data; // 连接头节点(链表的头插法) newPt->next = head->next; head->next = newPt; return true; } template <class T> T Stack<T>::pop(){ T data; // 要弹出的数据 Node<T> *pf; // 要销毁的指针 pf = head->next; // 取第一个数据 if(!pf) // 如若第一个数据为空 则表示栈为空 return 0; data = pf->data; // 取第一个数据保存进临时变量 head->next = head->next->next; // 节点后移 delete pf; // 删除节点 return data; } template <class T> bool Stack<T>::isEmpty(){ if(head->next) // 取第一个节点,不为空表示有数据 return true; return false; } template <class T> void Stack<T>::Clear(){ while(isEmpty()){ // 依次把数据弹出,则变相清空了栈 pop(); } } template <class T> void Stack<T>::Destory(){ Clear(); // 清空所有数据 delete head; // 销毁头节点 } #endif // STACK_H_INCLUDED
TestStack.cpp
#include <iostream> using namespace std; #include "stacks.h" int main(){ Stack<int> s; // Stack<char> s1; // Stack<string> s2; // Stack<double> s3; // Stack<char> sTemp; // s.push("A"); // cout << s.pop() << " "; for(int i = 0; i < 8; ++i){ s.push(i); // sTemp.push(i+32); } // cout << s.isEmpty() << endl; for(int i = 0; i < 8; ++i){ cout << s.pop() << " "; } return 0; }
相关文章推荐
- 抛一个kalman滤波跟踪的封装类 c++版opencv实现
- C++封装DLL,导出一个类
- 一个Windows C++的线程类实现(封装API,形成一个类,但不完善。其实可以学习一下Delphi的TThread的写法)
- 从零开始学C++之数据封装与抽象:分别用C和C++来实现一个链栈
- C++封装一个时间库
- __try 内外不能有 c++ 代码,要封装成一个函数
- 用c++封装一个Hash Table,并与STL map 进行操作性能上的比较
- C++——一个封装好的环形缓冲区
- C++ 封装一个经纬度的类
- 一个简单封装用户命令的C++程序
- [c++]一个对MSXML的封装类 使用C++的Smart Pointer 对MSXML DOM封装,可以方便地访问xml文件
- c++封装的一个播放音频类
- 一个封装HTTP请求的函数(C++)
- 用C++封装了一个简单的“按钮”类
- onvif学习笔记7:一个C++封装的onvif代码的阅读笔记
- 【ThinkingInC++】37、更安全的union可以封装在一个类中
- 一个简单封装用户命令的C++程序
- C# 发中调用一个采用C++封装好的dll, 其结构体中的二维数转换
- 自己写的一个关于Sqlite3 操作的 的C++封装
- 一个封装好的C++比特数组BitArray,可以对位进行直接操作