数据结构(C++)-用顺序结构实现的栈模板类

本文介绍了一个通用栈数据结构的C++实现,包括栈的基本操作如push、pop等,并通过一个具体的栈类stackType来演示如何使用该抽象数据类型。文章详细展示了栈的初始化、检查空满状态等功能。

栈:last in first out

1.MStackADT.h

 #ifndef MSTACKADT_H
#define MSTACKADT_H
/*
Create by软件工程 gpwner 2016年11月20日
*/
template<class T>
class MStackADT
{
public:
    MStackADT();
    virtual ~MStackADT();
    //栈的初始化
    virtual void initializeStack() = 0;
    //栈是否为空
    virtual bool isEmptyStack() const = 0;
    //栈是否已满
    virtual bool isFullStack() const = 0;
    //插入数据
    virtual void push(const T& newItem) = 0;
    //获取栈中的数据
    virtual T top() const = 0;
    //弹出数据
    virtual void pop() = 0;


private:
};

#endif // MSTACKADT_H

2.MStack.h

#ifndef STACKTYPE_H
#define STACKTYPE_H
#include<MStackADT.h>
#include <iostream>
#include <cassert>

using namespace std;

template <class T>
class stackType: public MStackADT<T>
{
public:
    const stackType<T>& operator=(const stackType<T>&);
    void initializeStack()
    {
        stackTop = 0;
    }
    bool isEmptyStack() const
    {
        return(stackTop == 0);
    }
    bool isFullStack() const
    {
        return(stackTop == maxStackSize);
    }
    void push(const T& newItem)
    {
        if (!isFullStack())
        {
            arr[stackTop] = newItem;   //add newItem to the
            //top of the stack
            stackTop++; //increment stackTop
        }
        else
            cout << "Cannot add to a full stack." << endl;
    }
    T top() const
    {
        assert(stackTop != 0);          //if stack is empty,
        //terminate the program
        return arr[stackTop - 1];
    }
    void pop()
    {
        if (!isEmptyStack())
            stackTop--;                 //decrement stackTop
        else
            cout << "Cannot remove from an empty stack." << endl;
    }
    stackType(int stackSize = 100)
    {

        if (stackSize <= 0)
        {
            cout << "Size of the array to hold the stack must "
                 << "be positive." << endl;
            cout << "Creating an array of size 100." << endl;

            maxStackSize = 100;
        }
        else
            maxStackSize = stackSize;


        stackTop = 0;
        arr = new T[maxStackSize];  //create the array to
    }
    stackType(const stackType<T>& otherStack)
    {
        delete [] arr;
        maxStackSize = otherStack.maxStackSize;
        stackTop = otherStack.stackTop;

        arr = new T[maxStackSize];

        //copy otherStack into this stack
        for (int j = 0; j < stackTop; j++)
            arr[j] = otherStack.arr[j];
    }
    ~stackType()
    {
        delete [] arr; //
    }

private:
    int maxStackSize;
    int stackTop;
    T *arr;


    void copyStack(const stackType<T>& otherStack);

};

#endif // STACKTYPE_H

注意:在code blocks下,模板类的方法的实现是不能在.cpp文件中写的,必须在.h文件中写。否则会报错,说你的模板的类没有实现。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值