vcNa41eu2vNa4z/LVu7XNo6y1sdG51bu1xMqxuvKjrHRvcNa41evP8snP0sa2r6Os1rG1" /> vcNa41eu2vNa4z/LVu7XNo6y1sdG51bu1xMqxuvKjrHRvcNa41evP8snP0sa2r6Os1rG1">
首页 数据库 mysql教程 数据结构栈

数据结构栈

Jun 07, 2016 pm 04:10 PM
一下 学习 数据结构 笔记 记录 语言 说明

说明:严蔚敏的《数据结构》(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

\

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

\

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

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

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1663
14
CakePHP 教程
1420
52
Laravel 教程
1313
25
PHP教程
1266
29
C# 教程
1238
24
小红书笔记怎么删除 小红书笔记怎么删除 Mar 21, 2024 pm 08:12 PM

小红书笔记怎么删除?在小红书APP中是可以编辑笔记的,多数的用户不知道小红书笔记如何的删除,接下来就是小编为用户带来的小红书笔记删除方法图文教程,感兴趣的用户快来一起看看吧!小红书使用教程小红书笔记怎么删除1、首先打开小红书APP进入到主页面,选择右下角【我】进入到专区;2、之后在我的专区,点击下图所示的笔记页面,选择要删除的笔记;3、进入到笔记页面,右上角【三个点】;4、最后下方会展开功能栏,点击【删除】即可完成。

小红书发布过的笔记不见了怎么办?它刚发的笔记搜不到的原因是什么? 小红书发布过的笔记不见了怎么办?它刚发的笔记搜不到的原因是什么? Mar 21, 2024 pm 09:30 PM

作为一名小红书的用户,我们都曾遇到过发布过的笔记突然不见了的情况,这无疑让人感到困惑和担忧。在这种情况下,我们该怎么办呢?本文将围绕“小红书发布过的笔记不见了怎么办”这一主题,为你详细解答。一、小红书发布过的笔记不见了怎么办?首先,不要惊慌。如果你发现笔记不见了,保持冷静是关键,不要慌张。这可能是由于平台系统故障或操作失误引起的。检查发布记录很简单。只需打开小红书App,点击“我”→“发布”→“所有发布”,就可以查看自己的发布记录。在这里,你可以轻松找到之前发布的笔记。3.重新发布。如果找到了之

使用Java函数比较进行复杂数据结构比较 使用Java函数比较进行复杂数据结构比较 Apr 19, 2024 pm 10:24 PM

Java中比较复杂数据结构时,使用Comparator提供灵活的比较机制。具体步骤包括:定义比较器类,重写compare方法定义比较逻辑。创建比较器实例。使用Collections.sort方法,传入集合和比较器实例。

探索智能体的边界:AgentQuest,一个全面衡量和提升大型语言模型智能体性能的模块化基准框架 探索智能体的边界:AgentQuest,一个全面衡量和提升大型语言模型智能体性能的模块化基准框架 Apr 11, 2024 pm 08:52 PM

基于大模型的持续优化,LLM智能体——这些强大的算法实体已经展现出解决复杂多步骤推理任务的潜力。从自然语言处理到深度学习,LLM智能体正逐渐成为研究和工业界的焦点,它们不仅能理解和生成人类语言,还能在多样的环境中制定策略、执行任务,甚至使用API调用和编码来构建解决方案。在这种背景下,AgentQuest框架的提出具有里程碑意义,它不仅仅是一个LLM智能体的评估和进步提供了一个模块化的基准测试平台,而且通过其易于扩展的API,为研究人员提供了一个强大的工具,以更细粒度地跟踪和改进这些智能体的性能

Java数据结构与算法:深入详解 Java数据结构与算法:深入详解 May 08, 2024 pm 10:12 PM

数据结构和算法是Java开发的基础,本文深入探讨Java中的关键数据结构(如数组、链表、树等)和算法(如排序、搜索、图算法等)。这些结构通过实战案例进行说明,包括使用数组存储分数、使用链表管理购物清单、使用栈实现递归、使用队列同步线程以及使用树和哈希表进行快速搜索和身份验证等。理解这些概念可以编写高效且可维护的Java代码。

从零开始学习Go语言中的main函数 从零开始学习Go语言中的main函数 Mar 27, 2024 pm 05:03 PM

标题:从零开始学习Go语言中的main函数Go语言作为一种简洁、高效的编程语言,备受开发者青睐。在Go语言中,main函数是一个入口函数,每个Go程序都必须包含main函数作为程序的入口点。本文将从零开始介绍如何学习Go语言中的main函数,并提供具体的代码示例。一、首先,我们需要安装Go语言的开发环境。可以前往官方网站(https://golang.org

大模型下B端前端代码辅助生成的思考与实践 大模型下B端前端代码辅助生成的思考与实践 Apr 18, 2024 am 09:30 AM

一、背景重构工作中,代码规范:B端前端开发过程中开发者总会面临重复开发的痛点,很多CRUD页面的元素模块基本相似,但仍需手动开发,将时间花在简单的元素搭建上,降低了业务需求的开发效率,同时因为不同开发者的代码风格不一致,使得迭代时其他人上手成本较高。AI代替简单脑力:AI大模型的不断发展,已经具备简单的理解能力,并可以进行语言到指令的转换。对于基础页面搭建这样的通用指令可满足日常基础页面搭建的需求,提升通用场景业务开发效率。二、生成链路一览B端页面列表、表单、详情都支持生成,链路大概可分为以下几

vivox60pro语言显示怎么更改 vivox60pro系统语言设置方法 vivox60pro语言显示怎么更改 vivox60pro系统语言设置方法 Mar 23, 2024 am 09:06 AM

1、在手机设置菜单中点击【系统管理】。2、点击【语言】选项。3、选择需要使用的系统语言即可。

See all articles