栈是顺序表或者单链表的一种特殊表现形式,也就是栈的基础是顺序表和单链表。栈是一种元素满足先进后出(LIFO)规则的线性表。这种要求也决定了栈的操作是在表尾(栈顶)进行。一般来说,我们将栈的表头称为栈底,将栈的表尾称为栈顶,向栈内添加元素,我们称为入栈(push),删除元素我们称为出栈(pop)。栈一旦形成,栈底的位置固定,没有任何元素的栈叫做空栈,随着元素的增加,栈顶指针会上移;随着元素的出栈,栈顶的指针会下移靠近栈底指针,当栈顶指针越过栈底时,栈清空位空栈。
template<typename datatype>class stack
{
public:
stack(int size)
{
maxsize=size;
top=-1;//初始化为空栈//
elements=new datatype[size];//分配空间//
}
~stack()
{
delete[]elements;
}
bool push(datatype data);//入栈函数//
datatype pop();//出栈函数//
private:
datatype *elements;
int top;
int maxsize;
}
入栈操作:
template<typename datatype>bool stack<datatype>::push(datatype data)
{
if(top==maxsize)//判断是否满栈//
return false;
elements[++top]=data;//++top是因为我们设top=-1//
return true;
}
出栈操作:
template<typename datatype>datatype stack<datatype>::pop()
{
if(top==-1)//判断是否空栈//
exit(1);
return elements[top--];//top--就是返回栈顶元素,同时top指向下一个元素//
}