我在学习栈的过程中遇到一些有意思的地方,是什么造成我理解的失误,我又是怎么明白了这其中的奥秘的,今天我们来剖析一下栈,下面进入今天的主题。
(一)介绍一下栈的基础知识
①栈(Stack)是特殊的线性表,说它特殊,就是特殊在插入、删除操作只能在线性表的一端进行,这一端称为栈顶(Top),而它的另一端称为栈底(Bottom)。如图
②由于这种只能在一端进行操作的线性表,所以在进行出栈的时候就有如下特点“先进后出,后进先出”。解释这句话就是,最先进来的元素在栈底,也是最后进行退栈(删除)操作,而栈顶的元素则是最后插入的元素,也是最先进行退栈(删除)操作。
③运算:入栈是在栈顶位置插入一个新的元素,先将Top指针+1,然后将元素插入到栈顶指针指向的位置。*注意“上溢”错误。
退栈是将栈顶元素取出并赋给一个指定的变量,先将栈顶指针指向的元素赋给指定的变量,然后将栈顶指针Top-1。*注意“下溢”错误
*我们要清楚Top指针中存放的是节点的地址,节点中才是存放元素.
(二)易失误
①由于很多栈的图就如上一幅一样,画成下面是栈底,上面是栈顶所以在计算的时候会造成一些错误。实际上如下图都是正确的
②栈内元素计算
公式:|Top-Bottom| + 1
例子:
首先我们应该确定栈底的位置,由初始状态为top=51,栈的空间是1——50,得知50为栈底(Bottom)。利用公式得出“|20-50|+1=31”选择31为正确。
错误做法是认为1为栈底(Bottom),利用公式得出“|20-1|+1=20”选择20为错误。
例子:
首先确定栈底位置,由初始状态为top=0,栈的空间为1——50,得知栈底(Bottom)为1。利用公式得“|20-1|+1=20”选择20为正确。
*“|……|”为绝对值符号。
对于栈的一些小知识点就分享到这里,希望可以帮助到各位,如果各位觉得不错请关注+点赞+看一看,分享给您身边有需要的朋友。