#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的变量。
此时就要用堆栈。堆栈的栈顶始终保持着函数的局部变量。当函数返回,则往回收缩,这多方便。
而堆呢?适合全局的、一般的存储。