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