打印

数据结构之堆栈的C++语言实现补充

[复制链接]
626|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
韩山童|  楼主 | 2017-1-5 19:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上一篇帖子已经详细说明了栈的实现了,这个帖子不再加以说明了。不同之处主要在于将new和delete用malloc和free替换了,同时用动态数组作为栈的存储结构。以下是代码。有错误的地方请批评指正,蟹蟹!
#ifndef STACKARR_H_INCLUDED
#define STACKARR_H_INCLUDED

#include <stdio.h>
#include <iostream>
using namespace std;

/*堆栈的类定义*/
template <typename T>
class Stack
{
private:
    T* mHead;
    int mTop;
    int mSize;
public:
    Stack(int sz);
    virtual ~Stack();

    void push(T e);     //入栈操作
    void pop(T& e);      //出栈操作
    bool isEmpty();     //判断栈空
    bool isFull();      //判断栈满
    int getSize();      //返回栈中总元素
    void print();    //打印栈中的元素 但不出栈
};

template <typename T>
void Stack<T>::print()
{
   for (int i=mTop; i >= 0; --i)
    printf("%d ",mHead[i]);
}

//构造函数 创建头指针
template <typename T>
Stack<T>::Stack(int sz)
{
    mHead = (T*)malloc(sz * sizeof(T));
    mTop = -1;
    mSize = sz;
}

/*析构函数:释放栈所占的堆内存*/
template <typename T>
Stack<T>::~Stack()
{
   free(mHead);
   mHead = NULL;
}

//入栈
template <typename T>
void Stack<T>::push(T e)
{
    if (mSize-1 == mTop)
    {
         printf("栈已经满!\n");
         return;
    }
    mHead[++mTop] = e;
}

//出栈
template <typename T>
void Stack<T>::pop(T& e)
{
    if(isEmpty())
    {
        printf("栈已空!!!\n");
        return;
    }
    e = mHead[mTop--];
}

//判断栈空
template <typename T>
bool Stack<T>::isEmpty()
{
    return -1 == mTop ? true : false;
}

//判断栈满
template <typename T>
bool Stack<T>::isFull()
{
    return (mTop +1) == mSize ? true : false;
}

//获取栈中总元素个数
template <typename T>
int Stack<T>::getSize()
{
    return mTop+1;
}
#endif // STACKARR_H_INCLUDED

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

43

帖子

1

粉丝