push和pop是什么类型的栈

JavaScript09

push和pop是什么类型的栈,第1张

push就是推,延伸为推进。这个它是汇编的一个指令,当然你也可能在其它语言中见到它。意思都是差不多的,就是把一个元素放入栈中。你可以假想栈是一个放光盘的那种盒子,有底没盖,先push进去的光盘总是要等后push进去的出来后才能出来。而pop和push相反,它的意思是弹出,就是从栈里弹出一个元素,每次弹出的都是栈顶(光盘盒最上面那个,也就是最后放进去的那个)的那个元素。前面所说都是汇编对栈的操作,在js中数组也有这两个函数,放不指定参数时,分别是在数组末尾添加或删除一个元素,指定参数时,则添加或删除指定的元素。

#include <stdio.h>

#include <stdlib.h>

class Stack

{

private:

int arrayvalues[5]

int pushpointer//指向进栈元素的指针public:

Stack()

{

pushpointer=-1

}

void Push(int value)

{

if(pushpointer+1<5)

{

++pushpointer

arrayvalues[pushpointer]=value

}

else

{

printf("栈已满,数字%d无法进栈!\n",value)

}

} int Pop()

{

if(pushpointer>=0)

{

int temp = arrayvalues[pushpointer--]

return temp

}

else

{

printf("栈空!")

return -1

}

} int GetTop()

{

if(pushpointer>=0)

{

return arrayvalues[0]

}

else

{

printf("栈空!")

return -1

}

}

void Print()

{

printf("目前栈的情况:\n") for(int i=0i<=pushpointer++i)

{

printf("%d ",arrayvalues[i])

}

printf("\n")

}

}void main()

{

Stack stack//推入6个数字:

for(int i=1i<=6++i)

{

stack.Push(i)

}

stack.Print()printf("顶栈数字:%d\n",stack.GetTop())for(int i=1i<=6++i)

{

stack.Pop()

stack.Print()

}

system("pause")

} 截图:

这很好理解,比如说这么个函数:

function sum(i)

{

if (i == 1) return 1

return i + sum(i - 1)

}

显然,这是一个递归函数,函数自己调用自己。

那么每个调用,都必须保存一个i的变量。

此时就要用堆栈。堆栈的栈顶始终保持着函数的局部变量。当函数返回,则往回收缩,这多方便。

而堆呢?适合全局的、一般的存储。