www.pudn.com > gc.rar > 8_3_ACKERMANN.C
# include# define MAXN 8000 typedef struct node { int n; double x,y; }NODE; NODE stack[MAXN]; int top,deb,depth; /*顺序存储栈的进栈函数*/ int push(NODE stack[],int maxn,int *toppt,NODE x) /*进栈函数*/ { if (*toppt >= maxn) return 1; /*栈满,进栈失败返回1 */ stack[*toppt] = x; /*完成进栈运算 */ ++ *toppt; if (*toppt > depth) depth = *toppt; return 0; /*进栈成功,返回0 */ } /*顺序存储栈的出栈函数*/ int pop(NODE stack[],int *toppt,NODE *cp) { if(*toppt == 0) return 1; /*栈空,出栈失败返回1 */ -- *toppt; *cp = stack[*toppt]; /*完成出栈运算 */ return 0; /*出栈成功,返回0*/ } double A(NODE node) { int k; double B; NODE tnode; top = 0;depth = 0; push(stack,MAXN,&top,node); /* 将node进栈*/ do { /*循环计算至栈空*/ tnode = stack[top-1]; /*读栈顶结点的值存入tnode*/ while (tnode.n != 0 && tnode.y !=0) { /*递推,将计算结果进栈*/ /* 修改栈顶结点的参数,并求得新结点进栈*/ stack[top-1].n--;stack[top-1].y = stack[top-1].x; stack[top-1].x = -1.0; /*表示x值不定*/ tnode.y -= 1.0; if(push(stack,MAXN,&top,tnode)) return -1.0; /*将tnode进栈*/ } if (deb) { for (k = 0 < top-10? top-10:0;k