【数据结构笔记05】堆栈及其顺序存储、链式存储
本次笔记内容:
2.2.1 什么是堆栈
2.2.2 堆栈的顺序存储实现
2.2.3 堆栈的链式存储实现
2.2.4 堆栈的应用:表达式求值
文章目录
- 引:计算机如何进行表达式求值?
- 堆栈的抽象数据类型描述
- 栈的顺序存储实现
- 堆栈的链式存储实现
- 表达式求值及其他应用
引:计算机如何进行表达式求值?
由两类对象构成:
- 运算数,如2、3、4;
- 运算符号:如+、-、*、/。
- 不同的运算符号优先级不一样。
中缀表达式:a+b*c-d/e
后缀表达式:abc*+de/-
例:62/3-42*+=?
遇到6、2、/,则6/2=3;
遇到3、-,则3-3=0;
遇到4、2、*,则4*2=8;
遇到+,则0+8=8。
计算策略:从左往右扫描,遇到数则存储,遇到运算符号则将最近存储两个数计算 。
则需要一种后进先出的数据结构,就是堆栈。
T(N)=O(N)T(N)=O(N)T(N)=O(N)
堆栈的抽象数据类型描述
堆栈(Stack):具有一定约束的线性表。
插入数据:入栈(Push)
删除数据:出栈(Pop)
先入后出:Last In First Out(LIFO)
在使用Push()或Pop()前,通常调用IsFull()判断堆栈是否为满或调用IsEmpty()判断是否为空。
对于ABC入栈,不可能产生CAB的输出。
栈的顺序存储实现
使用数组存储。
#define MaxSize <储存数据元素的最大个数>
typedef struct SNode *Stack;
struct SNode
{ElementType Data[MaxSize];int Top;
};
入栈:
void Push(Stack PtrS, ElementType item)
{if (Ptrs->Top == MaxSize - 1){printf("堆栈满") : return;}else{PtrS->Data[++(PtrS->Top)] = item;return;}
}
出栈。
ElementType Pop(Stack PtrS)
{if (PtrS->Top == -1){printf("堆栈空");return ERROR; // ERROR是ElementType的特殊值,标志错误}else{return (PtrS->Data[(PtrS->Top)--]);}
}
堆栈的链式存储实现
堆栈初始化;
typedef struct SNode *Stack;
struct SNode
{ElementType Data;struct *Next;
};Stack CreateStack()
{ /* 构建一个堆栈的头结点,返回指针 */Stack S;S = (Stack)malloc(sizeof(struct SNode));S->Next = NULL;return S;
}
Push()与Pop()不再展示。注意free()临时指针空间。
表达式求值及其他应用
对于中缀表达式,将运算符号放入堆栈中进行存储,遇到新运算符,运算符出栈时,比较优先级。
- 函数调用及递归实现
- 深度优先算法
- 回溯算法
【数据结构笔记05】堆栈及其顺序存储、链式存储相关推荐
- 数据结构-第二章(5)-链式存储结构
数据结构 ⚡️数据结构-第一章 ⚡️抽象数据类型案例 ⚡️数据结构-第二章(1)-线性结构 ⚡️数据结构-第二章(2)-线性表的顺序表示和实现 ⚡️数据结构-第二章(3)-顺序表(含代码) ⚡️数据结 ...
- 【数据结构】CH2 线性表的链式存储结构
目录 一.链表概述 1.相关定义 二.单链表 1.插入和删除节点的操作 (1)插入结点 (2)删除结点 2.建立单链表 (1)头插法 (2)尾插法 3.线性表基本运算在单链表中的实现 (1)初始化线性 ...
- 5.顺序存储 + 链式存储
这节以下面的脑图展开讲解. 顺序存储:顺序存储结构是存储结构类型中的一种,该结构是把逻辑上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现. 链式存储:链式存储 ...
- 数据结构(六)---队列的链式存储的实现---java版
---------------------------------------------节点设置------------------------------------ package com.cn ...
- 数据结构(五)---栈的链式存储的实现---java版
------------------------------------------------链栈的节点设置--------------------------------------------- ...
- 数据结构-线性表的顺序、链式存储结构
- 数据结构java稀疏矩阵_数据结构之十字链表——稀疏矩阵的链式存储及加法运算...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 以下简单实现了数据结构中的十字链表(Java实现):代码为添加(add)方法及求和(sum)方法,其它方法后续有时间再添加,最下面有测试方法 CrossL ...
- 【数据结构笔记06】队列及其顺序存储、链式存储
本次笔记内容: 2.3.1 队列及顺序存储实现 2.3.2 队列的链式存储实现 文章目录 什么是队列 队列的顺序存储实现 循环队列 队列的链式存储实现 什么是队列 队列(Queue):具有一定操作约束 ...
- 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)
线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...
最新文章
- loadscript加载
- Kdevelop的安装-2种方法
- oracle中有类似split的方法么,ORACLE中字符串split的一种方法
- 华为会更新鸿蒙吗,华为p30升级鸿蒙系统时间是什么时候
- go 异常捕获处理 panic defer recover
- 一个生产的shell脚本
- Request的getHeader()和getParameter()的区别
- 使用Origin Pro2021画简单函数图像
- 我做自媒体每日的工作时间安排
- linux 程序收到sigsegv信号_Linux基础知识(五)
- linux让指定文件具有sudo的权限,Linux学习笔记——使用指定的用户权限执行程序——sudo...
- 对MAC自带的SVN进行升级
- Puppet常用资源使用详解
- BottomBar之Android底部菜单
- 计算机网络与综合布线系统设计,浅谈计算机网络综合布线系统设计
- PyQt5 关于消息盒子QMessageBox 不显示消息盒子且出现内存不足的问题
- java读取本地图片并在网页显示
- 任务管理器显示命令行
- 魔方(10)金字塔魔方、金字塔二重奏魔方
- 520 钻石争霸赛 2021 7-8 浪漫侧影 (25 分)
热门文章
- Django-djangorestframework-异常模块-源码及自定义异常
- spring定时任务执行两次的原因与解决方法
- 【问题待解决】自定义控件设计界面报错,编译运行正常
- Python3基础 try-指定except-as reason 捕获打开一个不存在的文件的时候,会产生OSError异常的示例
- python字典实现原理-哈希函数-解决哈希冲突方法
- xShell终端中文乱码完全解决方法
- JSLint说“缺少基数参数”
- 如何在Shell脚本中漂亮地打印JSON?
- 将jQuery的复选框设置为“已选中”?
- 维护人员工具_确保丝印机顺畅使用的维护事项有哪些?