用栈实现阶乘
实验内容: 从键盘读入若干个整数,建一个链式栈,并完成下列操作: (1)初始化栈; (2)判栈为空; (3)出栈; (4)入栈。
实验步骤: (1)定义结构体及栈链数据域的最大值 #include <stdio.h> #define MAX 30 typedef struct stack{ int next; int data[20]; }Stack; Stack t;
(2)入栈 定义一个变量i,以及所输入要计算的n阶乘,在进行判断,如果输入的n比MAX大,则直接退出,不然执行下面的语句。写一个for循环,将1到n依次加1存入到栈中,最后再将输入的n输出到屏幕上。 int push(int i) { int n; scanf("%d", &n); if(n > MAX) return; for(i=2; i<=n; ++i) { t.data[t.next++] = i; } printf("%d!=",n); }
(3)出栈 出栈时定义一个变量i,定义一个长整形变量l用作结果,作循环,t.next所指的指针大于0则将数据取出,执行数据域的相乘来得到结果。 int pop(int i) { long l = 1; while(t.next > 0) { l *= t.data[--t.next]; } return l; }
(4)主函数 主函数用于栈链指针的初始化,以及应用入栈,出栈函数。 void main() { int n; long l = 1; t.next = 0; push(n); printf("%d \n", pop(l)); }
(5)代码入下 #include <stdio.h> #define MAX 30
typedef struct stack{ int next; int data[20]; }Stack; Stack t;
int push(int i) { int n; scanf("%d", &n); if(n > MAX) return; for(i=2; i<=n; ++i) { t.data[t.next++] = i; } printf("%d!=",n); }
int pop(int i) { long l = 1; while(t.next > 0) { l *= t.data[--t.next]; } return l; } void main() { int n; long l = 1; t.next = 0; push(n); printf("%d \n", pop(l)); }
|
|
实验结果: n=3: n=5:
实验总结: 通过对用栈链的方式实现n的阶乘的编写,让我对栈链的操作更加熟悉,先定义栈链后在进行判断,然后进行入栈操作,入栈完成后要体现出先进后出的原则,所进行的操作要在栈顶执行。但是还是运用的不太熟练,会多编写几个栈的操作的算法,使自己掌握的更加牢固。 |