stack.h
#define STACK_INIT_SIZE 2
#define STACK_INCREMENT 2
typedef int elementype;
class Stack
{
public:
elementype *base,*top;
int size; //已分配空间
Stack();
void Push(elementype x); //插入数据
elementype Top(); //栈顶元素
elementype Pop(); //删除栈顶元素并返回该元素
int Size(); //返回栈内元素个数
};
stack.cpp
#include "stack.h"
#include "string.h"
Stack::Stack()
{
base = new elementype [STACK_INIT_SIZE];
top = base;
size = STACK_INIT_SIZE;
}
void Stack::Push(elementype x)
{
if(top-base >= size) //需要扩容
{
elementype *newbase = new elementype[size + STACK_INCREMENT];
memcpy(newbase,base,size*sizeof(*base));
delete [] base;
base = newbase;
top = base + size;
size += STACK_INCREMENT;
}
*top = x;
top++;
}
elementype Stack::Top()
{
if(size !=0 )
return *(top-1);
else
{
elementype x=-1;
return x;
}
}
elementype Stack::Pop()
{
if(size !=0 )
{
top--;
return *(top);
}
else
{
elementype x=-1;
return x;
}
}
int Stack::Size()
{ return top-base;}