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

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

#ifndef MYSTACK_H
#define MYSTACK_H

template <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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值