数据结构之【栈】以及【模板类】基础练习
2017-01-15 17:10
239 查看
用模板的方法实现一个通用的栈类
注意:为了保证模板的通用性,遍历类的时候需要重载运算符<<
注意:为了保证模板的通用性,遍历类的时候需要重载运算符<<
#include<iostream> #include<string> #include<stdlib.h> using namespace std; /**********************************************/ /* 栈 模板类 要求: MyStack(int size);//分配内存,初始化空间,设定栈容量 ~MyStack();//回收栈空间内存 bool stackEmpty();//判定栈是否为空,空返回true,否则返回false bool stackFull();//判定栈是否满,满返回true,否则返回false void clearStack();//清空栈 int stackLEngth();//返回元素的个数 void push(char elem);//元素入栈,栈顶上升 char pop(char&elem);//元素出栈,栈顶下降 void stackTraverse();//遍历栈中所有元素 目的:掌握栈的实现原理和运行机制 */ /********************************/ class Coordinate { friend ostream& operator<<(ostream&out,Coordinate coor); public: Coordinate(int x=1, int y=2) :m_iX(x), m_iY(y){} private: int m_iX; int m_iY; }; ostream& operator<<(ostream&out, Coordinate coor) { out << "(" << coor.m_iX << "," << coor.m_iY << ")" << endl; return out; } template<typename T> class MyStack { public: MyStack(int size);//分配内存,初始化空间,设定栈容量 ~MyStack();//回收栈空间内存 bool stackEmpty();//判定栈是否为空,空返回true,否则返回false bool stackFull();//判定栈是否满,满返回true,否则返回false void clearStack();//清空栈 int stackLength();//返回元素的个数 bool push(T elem);//元素入栈,栈顶上升 bool pop(T&elem);//元素出栈,栈顶下降 void stackTraverse(bool isFromButton);//遍历栈中所有元素 private: T* m_pBuffer;//栈空间指针 int m_iSize;//栈容量 int m_iTop;//栈顶,栈中元素个数 }; template<typename T> MyStack<T>::MyStack(int size) { m_iSize = size; m_pBuffer = new T[size]; m_iTop = 0; } template<typename T> MyStack<T>::~MyStack() { delete[]m_pBuffer; m_pBuffer = NULL; } template<typename T> bool MyStack<T>::stackEmpty() { if (0 == m_iTop) { return true; } else { return false; } } template<typename T> void MyStack<T>::clearStack() { m_iTop = 0; } template<typename T> int MyStack<T>::stackLength() { return m_iTop; } template<typename T> bool MyStack<T>::stackFull() { if (m_iTop >= m_iSize) { return true; } else { return false; } } //push和pop函数能够反映栈机制 template<typename T> bool MyStack<T>::push(T element) //放到栈顶 { if (stackFull()) { return false; } else { m_pBuffer[m_iTop] = element; m_iTop++; return true; } } //char myStack::pop() //{ // if (stackEmpty()) // { // return 1; // } // else // { // m_iTop--; // return m_pBuffer[m_iTop]; // } // //} template<typename T> bool MyStack<T>::pop(T &elem) { if (stackEmpty()) { return false; } else { //elem = m_pBuffer[m_iTop];//当前m_iTop为空 m_iTop--; elem = m_pBuffer[m_iTop]; return true; } } template<typename T> void MyStack<T>::stackTraverse(bool isFromButton) { if (isFromButton) { for (int i = 0; i < m_iTop; i++) { cout << m_pBuffer[i] << ","; } } else { for (int i = m_iTop--; i >= 0; i--) { cout << m_pBuffer[i] << ","; } } cout << endl; } void funtest1() { MyStack<Coordinate> *pStack = new MyStack<Coordinate>(5); if (pStack->stackEmpty()) { cout << "栈为空" << endl; } pStack->push(Coordinate(1,2)); pStack->push(Coordinate(3,4)); pStack->push(Coordinate(5,6)); pStack->push(Coordinate(7,8)); pStack->stackTraverse(true); pStack->clearStack(); pStack->stackTraverse(true); delete pStack; pStack = NULL; } int main() { funtest1(); system("pause"); return 0; }
相关文章推荐
- 【算法学习笔记】07.数据结构基础 链表 初步练习
- 【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)
- 【算法学习笔记】08.数据结构基础 二叉树初步练习1
- 【算法学习笔记】09.数据结构基础 二叉树初步练习2
- 数据结构基础-队列(循环队列、链式队列)以及STL中queue的使用
- 【算法学习笔记】11.数据结构基础 二叉树初步练习4
- hrbustoj 1551:基础数据结构——字符串2 病毒II(字符串匹配,BM算法练习)
- 【算法学习笔记】09.数据结构基础 二叉树初步练习2
- 数据结构基础(五)图以及DFS、BFS
- 数据结构之队列基础练习
- 【算法学习笔记】11.数据结构基础 二叉树初步练习4
- 【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)
- 【算法学习笔记】08.数据结构基础 二叉树初步练习1
- 【算法学习笔记】07.数据结构基础 链表 初步练习
- 数据结构基础练习-二叉树的镜像
- 构筑无所不在计算的基础—TRON技术体系结构 以及老家
- 转: STL map, STL set之数据结构基础
- 学习STL map, STL set之数据结构基础
- 学习STL map, STL set之数据结构基础
- 学习STL map, STL set之数据结构基础