栈的应用

后进先出

【理解】每次可以把一本书放在箱子的最上方,也可以把箱子最上方的书拿出

栈顶指针是始终指向栈的最上方元素的一个标记,

当使用数组实现栈时,则是一个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();}

事实上,更常用的方法是重新定义一个栈以变相实现栈的清空

 

知识点来自于《算法笔记》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值