数据结构之栈模板实现(3)

来源:互联网 发布:斯伦贝谢软件研发中心 编辑:程序博客网 时间:2024/05/18 12:38

注意:1 注意模板的格式,声明文件和实现文件都放在头文件中,无法实现分离编译;
2 学会重载运算符和友元函数使用

#ifndef MYSTACK_H#define MYSTACK_Htemplate <typename T>class MyStack{public:    MyStack(){}    MyStack(int size);      //分配栈空间    ~MyStack();    bool stackEmpty();    bool stackFull();    void clearStack();    int stackLength();    bool push(T elem);    bool pop(T &elem);    void stackTraverse();private:    T *m_pBuffer;   //栈空间指针    int m_iSize;        //栈容量    int m_iTop;         //栈顶,栈中元素个数};template<typename T>MyStack<T>::MyStack(int size){    m_iSize = size;    m_iTop = 0;    m_pBuffer = new T[size];}template<typename T>MyStack<T>::~MyStack(){    delete[] m_pBuffer;    m_pBuffer = nullptr;}template<typename T>bool MyStack<T>::stackEmpty(){    if (0 == m_iTop)        return true;    return false;}template<typename T>bool MyStack<T>::stackFull(){    if (m_iTop == m_iSize)        return true;    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>::push(T elem){    if (stackFull())        return false;    m_pBuffer[m_iTop++] = elem;    return true;}template<typename T>bool MyStack<T>::pop(T &elem){    if (stackEmpty())        return false;    m_iTop--;    elem = m_pBuffer[m_iTop];    return true;}template<typename T>void MyStack<T>::stackTraverse(){    for (int i = 0; i < m_iTop; i++)        cout << m_pBuffer[i];}#endif
#ifndef COORDINATE_H#define COORDINATE_H#include<ostream>using namespace std;class Coordinate{    friend ostream &operator<<(ostream &out, Coordinate &coor);public:    Coordinate(){}    Coordinate(int x, int y);    void printCoordinate();private:    int m_iX;    int m_iY;};#endif
#include"Coordinate.h"#include<iostream>using namespace std;Coordinate::Coordinate(int x, int y) :m_iX(x), m_iY(y){}void Coordinate::printCoordinate(){    cout << "(" << m_iX << "," << m_iY << ")" << endl;}ostream &operator<<(ostream &out, Coordinate &coor){    out << "(" << coor.m_iX << "," << coor.m_iY << ")" << endl;    return  out;}
#include<iostream>#include"MyStack.h"#include"Coordinate.h"using namespace std;/*    栈-类模板    要求:        将普通栈改造为类模板,使其可以适用于任何数据类型    目的:灵活掌握栈机制,理解抽象数据类型在栈中的应用*/int main(){    MyStack<Coordinate> *pStack = new MyStack<Coordinate>(4);    pStack->push(Coordinate(1, 2));    pStack->push(Coordinate(1, 3));    pStack->stackTraverse();    delete pStack;    pStack = NULL;    return 0;}
0 0
原创粉丝点击