本次笔记内容:
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】堆栈及其顺序存储、链式存储相关推荐

  1. 数据结构-第二章(5)-链式存储结构

    数据结构 ⚡️数据结构-第一章 ⚡️抽象数据类型案例 ⚡️数据结构-第二章(1)-线性结构 ⚡️数据结构-第二章(2)-线性表的顺序表示和实现 ⚡️数据结构-第二章(3)-顺序表(含代码) ⚡️数据结 ...

  2. 【数据结构】CH2 线性表的链式存储结构

    目录 一.链表概述 1.相关定义 二.单链表 1.插入和删除节点的操作 (1)插入结点 (2)删除结点 2.建立单链表 (1)头插法 (2)尾插法 3.线性表基本运算在单链表中的实现 (1)初始化线性 ...

  3. 5.顺序存储 + 链式存储

    这节以下面的脑图展开讲解. 顺序存储:顺序存储结构是存储结构类型中的一种,该结构是把逻辑上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现. 链式存储:链式存储 ...

  4. 数据结构(六)---队列的链式存储的实现---java版

    ---------------------------------------------节点设置------------------------------------ package com.cn ...

  5. 数据结构(五)---栈的链式存储的实现---java版

    ------------------------------------------------链栈的节点设置--------------------------------------------- ...

  6. 数据结构-线性表的顺序、链式存储结构

  7. 数据结构java稀疏矩阵_数据结构之十字链表——稀疏矩阵的链式存储及加法运算...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 以下简单实现了数据结构中的十字链表(Java实现):代码为添加(add)方法及求和(sum)方法,其它方法后续有时间再添加,最下面有测试方法 CrossL ...

  8. 【数据结构笔记06】队列及其顺序存储、链式存储

    本次笔记内容: 2.3.1 队列及顺序存储实现 2.3.2 队列的链式存储实现 文章目录 什么是队列 队列的顺序存储实现 循环队列 队列的链式存储实现 什么是队列 队列(Queue):具有一定操作约束 ...

  9. 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)

    线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...

最新文章

  1. loadscript加载
  2. Kdevelop的安装-2种方法
  3. oracle中有类似split的方法么,ORACLE中字符串split的一种方法
  4. 华为会更新鸿蒙吗,华为p30升级鸿蒙系统时间是什么时候
  5. go 异常捕获处理 panic defer recover
  6. 一个生产的shell脚本
  7. Request的getHeader()和getParameter()的区别
  8. 使用Origin Pro2021画简单函数图像
  9. 我做自媒体每日的工作时间安排
  10. linux 程序收到sigsegv信号_Linux基础知识(五)
  11. linux让指定文件具有sudo的权限,Linux学习笔记——使用指定的用户权限执行程序——sudo...
  12. 对MAC自带的SVN进行升级
  13. Puppet常用资源使用详解
  14. BottomBar之Android底部菜单
  15. 计算机网络与综合布线系统设计,浅谈计算机网络综合布线系统设计
  16. PyQt5 关于消息盒子QMessageBox 不显示消息盒子且出现内存不足的问题
  17. java读取本地图片并在网页显示
  18. 任务管理器显示命令行
  19. 魔方(10)金字塔魔方、金字塔二重奏魔方
  20. 520 钻石争霸赛 2021 7-8 浪漫侧影 (25 分)

热门文章

  1. Django-djangorestframework-异常模块-源码及自定义异常
  2. spring定时任务执行两次的原因与解决方法
  3. 【问题待解决】自定义控件设计界面报错,编译运行正常
  4. Python3基础 try-指定except-as reason 捕获打开一个不存在的文件的时候,会产生OSError异常的示例
  5. python字典实现原理-哈希函数-解决哈希冲突方法
  6. xShell终端中文乱码完全解决方法
  7. JSLint说“缺少基数参数”
  8. 如何在Shell脚本中漂亮地打印JSON?
  9. 将jQuery的复选框设置为“已选中”?
  10. 维护人员工具_确保丝印机顺畅使用的维护事项有哪些?