mmxingye

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

01 | c语言非递归乘法表(帧栈理解)

复制代码
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <stdbool.h>
 4 
 5 typedef  struct{
 6     int pc;            //程序运行到了那一步
 7     int line;        //
 8 }Frame;
 9 
10 Frame stk[128];                //全局的栈
11 Frame *top = stk - 1;        //全局的栈指针
12 
13 void call(int line) {
14     //static int num = 1;
15 //     (*(++top)).pc = 0; 出现bug的地方,就在于++用的多了
16 //     (*(++top)).line = line;
17 //     (*(++top)).flag = flag;
18 
19     *(++top) = (Frame){ 0,line };    //学习这个指针一开始指在-1的位置,之后变为0,注意结构体的构造
20 }
21 
22 void ret() {
23     top--;
24 }
25 
26 void pp(int line) {
27     
28     call(line);                //注意这里是第一个桢,接下来就要靠它来生成其他的帧栈
29     for (Frame *f; (f = top) >= stk; f->pc++) {
30         if (f->pc+1 == f->line) {
31             for (int i = 1; i <= f->line; i++) {
32                 printf("%-2d* %-2d= %2d  ", i, f->line, i*f->line);            
33             }
34             printf("\n");
35             ret();                        //帧栈清理,事实是栈指针移动
36         }
37         //当相差为2的时候,这个时候才产生下一帧栈,若大于2的时候,为空语句,pc单纯增加
38         else if(f->pc+2==f->line){        
39             call(f->line - 1);
40         }    
41     }
42 }
43 int main() {
44     pp(10);
45     system("pause");
46 }
复制代码

 

posted on   独立树  阅读(31)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示