刚学数据结构,给大家分享一下今天学习数据结构的栈中的一个练习
也算是顺便记录一下学习过程
#include <stdio.h>
typedef struct StackNode
{
int vn; //保存n的值
int vf; //保存fun(n)的值
int tag; //标记是否求出值
} ST[20];
int top = -1; //全局变量指针
ST St; //全局变量
int fun(int n)
{
top++; //进栈
St[top].vn = n; //初值为n
St[top].tag = 1; //标记,不可求值
while(top>-1)
{
if(St[top].tag == 1) //不可求值
{
if(St[top].vn == 1 || St[top].vn == 0)
{
St[top].vf = 1;
St[top].tag = 0;
}
else{
top++;
St[top].vn = St[top - 1].vn - 1;
St[top].tag = 1;
}
}
else if(St[top].tag == 0) //可以直接求值
{
St[top - 1].vf = St[top - 1].vn*St[top].vf;//栈内元素的vf为最终的值
St[top - 1].tag = 0;
top--;
}
if(top == 0 && St[top].tag == 0)
break;
}
return(St[top].vf); //得到最终的值
}
int main()
{
printf("%d\n",fun(5));
return 0;
}
//运行结果:120