上一篇帖子已经详细说明了栈的实现了,这个帖子不再加以说明了。不同之处主要在于将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
|