后进先出
【理解】每次可以把一本书放在箱子的最上方,也可以把箱子最上方的书拿出
栈顶指针是始终指向栈的最上方元素的一个标记,
当使用数组实现栈时,则是一个int*型的指针
(数组下标从0开始),通常记为top
而当使用链表实现栈时,则是一个int*型的指针
栈中没有元素(即栈空)时令top为-1
下面是常规操作
①清空(clear)
栈的清空操作将栈顶指针top置为-1,表示栈中没有元素
void clear(){
top=-1
}
②获取栈内元素个数size
由于栈顶指针top始终指向栈顶元素,而数组下标从0开始,因此栈内元素的数为top+1
int size(){
return top+1;
}
③判空(empty)
由栈顶指针top的定义可知,仅当top=-1时为栈空,返回true
否则,返回false
bool empty()
{
if(top==-1)
return true;
else
return false;
}
④进栈(push)
push(x)操作将元素x置为栈顶,由于栈顶指针top指向栈顶元素
因此需要先把top+1,然后再把x存入top指向的位置
void push()
{
st[++top]=x;
}
⑤出栈(pop)
pop()操作将栈顶元素出栈,可事实上可以直接将栈顶指针top-1来实现这个效果
void pop()
{top--;}
⑥取栈顶元素
由于栈顶元素top始终指向栈顶元素,因此可以st[top]即为栈顶元素
int top()
{return st[top];}
需要特别注意的是,出栈操作和取栈顶操作必须在栈非空的情况下才能使用
因此在使用pop()函数和top函数之前必须要使用empty()函数判断栈是否为空
同时,可以使用STL中的stack容器来非常容易地使用栈
【注意】
STL中没有实现栈的清空,所以如果需要实现栈的清空
可以用一个while循环反复pop出元素直到栈空
while(!st.empty)
{st.pop();}
事实上,更常用的方法是重新定义一个栈以变相实现栈的清空
知识点来自于《算法笔记》