c++栈详解

定义:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。

l push操作:向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;

l pop操作:从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

c++栈详解_第1张图片

性质:栈(stack)只允许在栈顶进行插入操作和删除操作。

是一种后进先出(last in first out)的线性表,简称LIFO。

c++栈详解_第2张图片
c++栈详解_第3张图片

1. 栈的数组实现

虽然C++有专门的stack类型,但这里还是先学习用数组来实现栈。这对理解栈的原理和掌握编程技巧都非常有帮助。

1)定义数组作为存储栈的“容器”

2)常见功能的函数

函数

功能

使用样例

元素x压入栈顶

push(3);

弹出删除栈顶元素

pop();

cout << pop();

取栈顶的元素

cout << top();

栈中元素的个数

cout << stSize();

需要注意,head指向栈顶元素 。

另外:上面函数没有判断边界问题,要注意:head

在算法的优化中,有一种经常使用的技巧就是单调性(递增或递减)的运用。比如要保证栈的元素是单调递增的,当要进入的元素比栈顶元素小时,就要弹出栈顶元素或者丢掉这个元素不进入栈。

例如有任务:增长折线

有股票的每天价格,它们可以用折线图(橙色先)表示。

现在希望画出递增折线图

从第1天开始用直线连接后面的某些天的股价,希望连线是递增的,并且所有股价不会超过这些直线。下面的图就最多有两段这样的递增折线。

对给定的N天,问最多有几段这样的折线?

参考程序片段:

c++栈详解_第4张图片

如果是相反,求下降的折线个数,例如:

c++栈详解_第5张图片

参考程序片段:

c++栈详解_第6张图片

你可能感兴趣的:(c++基础精讲,c++,开发语言)