0

0

数据结构栈

php中文网

php中文网

发布时间:2016-06-07 16:10:57

|

1453人浏览过

|

来源于php中文网

原创

说明:严蔚敏的《数据结构》(C语言版)学习笔记,记录一下,以备后面查看。 如上图所示,刚开始base指针和tZ喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcNa41eu2vNa4z/LVu7XNo6y1sdG51bu1xMqxuvKjrHRvcNa41evP8snP0sa2r6Os1rG1

说明:严蔚敏的《数据结构》(c语言版)学习笔记,记录一下,以备后面查看。

\

如上图所示,刚开始base指针和tZ喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcNa41eu2vNa4z/LVu7XNo6y1sdG51bu1xMqxuvKjrHRvcNa41evP8snP0sa2r6Os1rG1vdW7wvq686Os1bu2pda41et0b3DWuM/y1bvN4rXY1rejrLTLyrHO0sPH0OjSqtTZt9bF5NDCv9W85KGjPC9wPjxwPjwvcD48cHJlIGNsYXNzPQ=="brush:sql;">#include #include #include #define STACK_INIT_SIZE 100 //存储空间初始分配量 #define STACKINCREMENT 10 //存储空间分配增量 const int OK = 1; //定义正确返回 const int ERROR = -1; //定义错误的返回 const int OVERFLOW = -2; //定义溢出 //定义元素类型 typedef int SElemType; //定义返回类型 typedef int Status; typedef struct{ SElemType *base; //栈底指针,在构造之前和销毁后base的值为NULL SElemType *top; //栈顶指针 int stacksize; //已分配的空间 }SqStack; //初始化栈 Status InitStack(SqStack &S){ S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK; } //获取栈顶元素 Status GetTop(SqStack S, SElemType &e){ if(S.top == S.base) return ERROR; e = *(S.top - 1); return OK; } //压栈 Status Push(SqStack &S, SElemType e){ if(S.top - S.base >= S.stacksize){ S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } *S.top = e; S.top++; return OK; } //出栈 Status Pop(SqStack &S, SElemType &e){ if(S.top == S.base) return ERROR; e = *(--S.top); return OK; } //判断栈是否为空 bool StackEmpty(const SqStack &S){ if(S.top == S.base) return true; else return false; } //十进制数转8进制数 void conversion(SqStack &S){ InitStack(S); printf("请输入10进制数,返回一个8进制数:\n"); int n; scanf("%d", &n); while(n){ Push(S, n % 8); n = n / 8; } SElemType e; printf("8进制数是:0x"); while(!StackEmpty(S)){ Pop(S, e); printf("%d", e); } printf("\n"); } int main(){ SqStack sq; //InitStack(sq); //Push(sq, 1); //Push(sq, 2); //Push(sq, 3); //SElemType e3; //Pop(sq, e3); //GetTop(sq, e3); //printf("%d", e3); conversion(sq); scanf("%d"); return 0; }

上面的conversion函数是一个将10进制转换为8进制的例子,这个就是栈的一个应用,还有例如,括号匹配的验证、迷宫求解等。

例如Hanoi塔问题:

假设有3个分别为a,b,c的三个塔座,a上有直径从大到小的圆盘,可以借助b塔座将a上的圆盘移动到c上,移动过程中大小顺序不变。

\

void movePic(char a, int n, char b){
    printf("将编号为%d的圆盘从%c上移动到%c上\n", n , a, b);
}

void hanuota(int n, char x, char y, char z){
    if(n == 1){
        movePic(x, 1, z);  //将编号为1的圆盘从x移到z
    }else{
        hanuota(n - 1, x, z, y); //将x上编号为1到n-1的圆盘移到y,z作辅助塔
        movePic(x, n, z);  //将编号为n的圆盘从x移到z
        hanuota(n - 1, y, x, z); //将y上编号为1到n-1的圆盘移到z,x作辅助塔
    }
}

int main(){
    hanuota(3, 'a', 'b', 'c');
}
我们可以将问题简单抽象成递归。

1、要将n个圆盘移动到c,则需要先将n-1个圆盘移动到b

viable
viable

基于GPT-4的AI非结构化数据分析平台

下载

\

2、再将a上的最底下的圆盘移动到c

\

3、最后将b上面的n-1个圆盘移动到c

经过这三个步骤就可以完成移动,在这三个步骤中,步骤1,从a将n-1个圆盘移动到b和问题本身是同一个问题,步骤3将n-1个圆盘从b移动到c也和问题本身是同一个问题,所以这两处我们就可以迭代调用。

相关专题

更多
c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

17

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

22

2026.01.23

yy漫画官方登录入口地址合集
yy漫画官方登录入口地址合集

本专题整合了yy漫画入口相关合集,阅读专题下面的文章了解更多详细内容。

91

2026.01.23

漫蛙最新入口地址汇总2026
漫蛙最新入口地址汇总2026

本专题整合了漫蛙最新入口地址大全,阅读专题下面的文章了解更多详细内容。

124

2026.01.23

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

14

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

65

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

59

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

61

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.7万人学习

Django 教程
Django 教程

共28课时 | 3.4万人学习

Excel 教程
Excel 教程

共162课时 | 13.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号