昆山爱达人信息技术有限公司 www.bcdaren.com QQ:254830010 本节内容 1.栈的链式存储结构及实现 2.栈的应用.

Slides:



Advertisements
Similar presentations
如何做友好往来的使者如何做友好往来的使者 ( 1 )要有开放 的胸怀 ( 表现在) ( 2 )搭起文 化的桥梁 ①采取客观、平等的态度,尊重因 文化不同而导致的行为方式的差异。 ②要善于虚心学习其他文化的优 点、长处。 ③要保护本民族的文化,同时也 应尊重、珍惜和保护各个国家、 民族的文化。 ①学习外来文化,不能照搬照抄,而.
Advertisements

一、解读《刑法修正案九》 《中华人民共和国刑法修正案 ( 九 ) 》由中华人民共和国第十二届全国人民代表大会常 务委员会第十六次会议于 2015 年 8 月 29 日通过, 现予公布, 自 2015 年 11 月 1 日起施行。
参赛指导手册 主题 1、如何确定作品主题 品牌故事 百年历史积淀 企业文化 社会公益活动 …… 有关的趣闻 啤酒文化 品牌形象延伸
问题的提出: 例1 把十进制整数转换为二至十六之间的任一进制数输出。
每一次 都在徘徊孤单中坚强 每一次 就算很受伤也不闪泪光 我知道 我一直有双隐形的翅膀 带我飞 飞过绝望 不去想 他们拥有美丽的太阳 我看见 每天的夕阳也会有变化 我知道 我一直有双隐形的翅膀 带我飞 给我希望 我终于 看到 所有梦想都开花 追逐的年轻 歌声多嘹亮 我终于 翱翔 用心凝望不害怕 哪里会有风.
实用数据结构基础 第3章 栈.
小学生游戏.
第3章 栈和队列.
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
Ch.3 栈和队列 黄刘生 中国科学技术大学计算机系 国家高性能计算中心(合肥)
线性表小结 元素之间的线性关系 顺序表 顺序表:元素相邻存储 单链表:后继指针链接 一维数组 给定下标随机存取
第3章 栈和队列(二) 1/.
第三章 栈和队列 栈和队列是两种重要的数据结构。
第3章 栈和队列(一).
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
教 师:曾晓东 电 话: E_mail: 计算机软件技术基础 教 师:曾晓东 电 话: E_mail:
第3章 栈和队列 3.1 栈 本章主题:栈和队列的应用 教学目的:掌握栈和队列的应用方法,理解栈的重要作用
数 据 结 构 刘家芬 Sept 2012.
计算机软件技术基础 数据结构与算法(3).
顺序表的删除.
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
本节内容 消息的分发 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 Java基本语法 讲师:复凡.
_04Combox控件和ListBox控件的使用
_05MessageMap的原理 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
单链表的基本概念.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
贴近教学 服务师生 方便老师.
第 四 讲 线性表(二).
Select模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
编译OpenSSL 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_08文件的基本操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
本节内容 类成员的访问控制 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 内存复制指令 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 Private Memory 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第九节 赋值运算符和赋值表达式.
<编程达人入门课程> 本节内容 计算机编程语言 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
第 六 讲 栈和队列(一).
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 线性地址的管理 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_13简单的GDI绘图操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本章的基本内容是: ⑴栈和队列的定义及操作特性; 第3章 特殊线性表—栈、队列和串 ⑵栈和队列的两种存储方法和基本运算的实现;
本节内容 模块隐藏 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
3.1私有内存的分配.
本节内容 消息的接收 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_03宽字符与Unicode编程 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
第二章 Java基本语法 讲师:复凡.
本节内容 结构体.
本节内容 指针类型的使用 视频提供:昆山爱达人信息技术有限公司.
本节内容 通用寄存器 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
_08文件操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
WSAAsyncSelect 模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
第七讲 栈和队列(二) 1/.
_07多连接之select模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
_01自己实现简单的消息处理框架模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 导出表 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
主题班会 网络安全教育.
第3章 栈和队列 3.1 栈 3.2 队列.
本节内容 如何调试驱动程序? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第三章 栈和队列.
编程达人-- 从零开始学UI系列教程 第九节、布尔运算 先行者 YC.
<编程达人入门课程> 本节内容 有符号数与无符号数 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
本节内容 this指针 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Presentation transcript:

昆山爱达人信息技术有限公司 www.bcdaren.com QQ:254830010 本节内容 1.栈的链式存储结构及实现 2.栈的应用

昆山爱达人信息技术有限公司 www.bcdaren.com QQ:254830010 栈的链式存储结构及实现 定义 栈的链式存储结构称为链栈,是运算受限的单链表。其插入和删除操作只能在表头位置上进行。因此,链栈没有必要像单链表那样附加头结点,栈顶指针top就是链表的头指针。

栈的链式存储结构及实现 定义 示意图: 对于链栈来说: 1.不需要头结点 2.不存在栈满的情况 3.top=NULL,为空栈 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:254830010 栈的链式存储结构及实现 定义 示意图: 对于链栈来说: 1.不需要头结点 2.不存在栈满的情况 3.top=NULL,为空栈

栈的链式存储结构及实现 链栈的结构代码 /* 链栈结构 */ typedef struct StackNode { 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:254830010 栈的链式存储结构及实现 链栈的结构代码 /* 链栈结构 */ typedef struct StackNode { SElemType data; struct StackNode *next; }StackNode,*LinkStackPtr; typedef struct LinkStackPtr top; int count; }LinkStack;

栈的链式存储结构及实现 进栈(push)操作 /* 插入元素e为新的栈顶元素 */ 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:254830010 栈的链式存储结构及实现 进栈(push)操作 /* 插入元素e为新的栈顶元素 */ Status Push(LinkStack *S,SElemType e) { LinkStackPtr s=(LinkStackPtr)malloc(sizeof(StackNode)); s->data=e; s->next=S->top;/* 把当前的栈顶元素赋值给新结点的直接后继*/ S->top=s; /* 将新的结点s赋值给栈顶指针*/ S->count++; return OK; } 演示:

栈的链式存储结构及实现 出栈(pop)操作 /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */ 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:254830010 栈的链式存储结构及实现 出栈(pop)操作 /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */ Status Pop(LinkStack *S,SElemType *e) { LinkStackPtr p; if(StackEmpty(*S)) return ERROR; *e=S->top->data; p=S->top; /* 将栈顶结点赋值给p*/ S->top=S->top->next; /* 使得栈顶指针下移一位,指向后一结点 */ free(p); /* 释放结点p */ S->count--; return OK; } 演示:

栈的链式存储结构及实现 注意 1.使用过程中元素的个数变化不可预料,有时很小,有时非常大,那么最好用链栈 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:254830010 栈的链式存储结构及实现 注意 1.使用过程中元素的个数变化不可预料,有时很小,有时非常大,那么最好用链栈 2.如果它的变化在可控的范围内,建议用顺序栈

栈的应用 应用1—递归 先来看一个经典的递归的例子:求n! 迭代的方法: 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:254830010 栈的应用 应用1—递归 先来看一个经典的递归的例子:求n! 迭代的方法: int _tmain(int argc, _TCHAR* argv[]) { unsigned int i; unsigned int n = 16; //求16的阶乘 unsigned int nResult = 1; for (i=1;i<=n;i++) nResult = nResult*i; printf("%d!=%d \n",i,nResult); } return 0;

栈的应用 应用1—递归 先来看一个经典的递归的例子:求n! 递归的方法: 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:254830010 栈的应用 应用1—递归 先来看一个经典的递归的例子:求n! 递归的方法: unsigned int Factorial(unsigned int n) { unsigned int nRet; nRet = 1; if(n>1) nRet = n*Factorial(n-1); } printf("%d!=%d \n",n,nRet); return nRet;

栈的应用 应用1—递归 先来看一个经典的递归的例子:求n! 递归的方法: 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:254830010 栈的应用 应用1—递归 先来看一个经典的递归的例子:求n! 递归的方法: int _tmain(int argc, _TCHAR* argv[]) { Factorial(16); return 0; }

栈的应用 应用1—递归 递归的定义: 一个直接调用自己或间接调用自己的函数成为递归函数 注意: 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:254830010 栈的应用 应用1—递归 递归的定义: 一个直接调用自己或间接调用自己的函数成为递归函数 注意: 必须有退出条件,让递归退出,是函数不再调用自身。 优点: 是代码简洁,更易理解 缺点: 1.递归由于是函数调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址以及临时变量,而往栈中压入数据和弹出数据都需要时间 2.调用栈可能会溢出,其实每一次函数调用会在内存栈中分配空间,而每个进程的栈的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致栈溢出

栈的应用 应用2—四则运算表达式 标准的四则运算: 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:254830010 栈的应用 应用2—四则运算表达式 标准的四则运算: 当一级运算(加减)和二级运算(乘除)同时出现在一个式子中时,它们的运算顺序是先乘除,后加减,如果有括号就先算括号内后算括号外,同一级运算顺序是从左到右,这样的运算叫四则运算。 比如:99+(88-11)×5+66÷2 1.先要算88-11=77 2.再算77×5=385 3.99+385=484 4. 66÷2=33 5.484+33=517 这样存在的问题: 1.要考虑括号 2.要考虑优先级 3.计算的顺序和运算符出现的位置不一样

栈的应用 应用2—四则运算表达式 后缀表达式: 定义: 举例: 99+(88-11)×5+66÷2 后缀表达式为: 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:254830010 栈的应用 应用2—四则运算表达式 后缀表达式: 可以实现所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运 算符的优先级和括号) 定义: 一种不需要括号的把所有的运算符号放到要运算数字后面的表达式 举例: 99+(88-11)×5+66÷2 后缀表达式为: 99 88 11 - 5 × + 66 2 ÷ + 演示后缀表达式计算过程:

栈的应用 应用2—四则运算表达式 中缀表达式转后缀表达式: 规则: 2.遇到数字,输出,成为后缀表达式的一部分 演示过程: 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:254830010 栈的应用 应用2—四则运算表达式 中缀表达式转后缀表达式: 可以实现所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运 算符的优先级和括号) 规则: 1.从左到右遍历中缀表达式的每个数字和符号 2.遇到数字,输出,成为后缀表达式的一部分 3.遇到符号,判断其与栈顶符号的优先级,不高于栈顶符号,栈顶符号依次出栈,并将当前符号进栈 4.遇到右括号依次弹出栈里的元素,直到弹出左括号 5.当栈变为空时,输出的结果即为后缀表达式 演示过程: