栈的特性是先进后出,这种特性我们一直都在用。最经常用到的地方就是主函数调用子函数。
下面的程序为例子:main() 里面调用进栈函数——就是将元素入栈,存放。当调用存放函数的时候,main函数,也就是主函数的进程——运行到哪一步了,会被入栈,保存进度,在入栈函数完成了,结束了,就会回头看main函数,将入栈的进程调出,继续往后运行程序。这个就是栈在函数中的运用。
主体程序:
#include <iostream>
#define MAXLEN 100
typedef struct Stack{
int date[MAXLEN];
int top;
}stack;
//初始化栈
void InitStack(stack &S){
S.top=-1;
}
//栈空
bool IsEmpty(stack S){
if(S.top == -1 ){
return true;
} else {
return false;
}
}
//栈满
bool IsFull(stack S){
if(S.top >= MAXLEN-1){
return true;
} else {
return false;
}
}
//出栈
int OutStack(stack &S){
if(IsEmpty(S)){
printf("空栈,无法输出!!\n");
return -1;
} else {
int x=S.date[S.top];
S.top--;
return x;
}
}
//展示栈
void ShowStack(stack S){
int i=S.top;
for(i; i>=0; i--){
printf("%d ",S.date[i]);
}
return ;
}
//进栈
void InStack(stack &S,int num){
if(IsFull(S)){
printf("栈满了!!\n");
return ;
} else {
S.top++;
S.date[S.top] = num;
return ;
}
}
//主函数
int main(){
stack S;
InitStack(S);
int i=1,x;
while(i != -1){
printf("请输入:");
scanf("%d",&x);
if(x==-1){
i=x;
}else{
InStack(S,x);
}
}
ShowStack(S);
}
而且栈的应用非常广泛,最经典的是递归调用,就是反复运用栈的原理——先进后出。