#ifndef STACK_H #define STACK_H #include<stdlib.h> const static int INIT_SIZE=100; const static int EXTRA_SIZE=10; template <typename T> class Stack { T *top; T *base; T *stackarray; int length; int arraySize; public: Stack(); ~Stack(); bool IsFull()const; void addSpace(); int push(T elem); int pop(); T getTop()const; int getLength()const; }; template<typename T> Stack<T>::Stack() { length=0; arraySize=INIT_SIZE; stackarray=new T[INIT_SIZE]; for(int i=0;i<INIT_SIZE;++i)stackarray[i]=-1; base=stackarray; top=base; } template<typename T> Stack<T>::~Stack() { delete base; } template<typename T> bool Stack<T>::IsFull()const { if(length+1>=arraySize)return true; else return false; } template<typename T> int Stack<T>::push(T elem) { if(IsFull()) { stackarray=(T *)realloc(stackarray,arraySize+EXTRA_SIZE); if(!stackarray) return -1; else { arraySize=+EXTRA_SIZE; base=stackarray; top=base+length; } } *top=elem; ++top; ++length; return 0; } template<typename T> int Stack<T>::pop() { if(top==base)return -1; else { *top=-1; --top; --length; return 0; } } template<typename T> T Stack<T>::getTop()const { return *(top-1); } template<typename T> int Stack<T>::getLength()const { return length; } #endif // Stack.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "stack.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { Stack<int> A; int i=9; while(i!=0) { A.push(i); --i; } cout<<A.getLength()<<"/n"; cout<<A.getTop()<<"/n"; A.pop(); A.pop(); cout<<A.getLength()<<"/n"; cout<<A.getTop()<<"/n"; system("pause"); return 0; }