数据结构与算法
半命i
这个作者很懒,什么都没留下…
展开
-
8.逆波兰计算器的实现
一、中缀表达式转后缀表达式1. 思路初始化两个栈:运算符栈s1和储存中间结果的栈s2;从左至右扫描中缀表达式;遇到操作数时,将其压s2;遇到运算符时,比较其与s1栈顶运算符的优先级: 1.如果s1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈; 2.否则,若优先级比栈顶运算符的高,也将运算符压入s1; 3.否则,将s1栈顶的运算符弹出并...原创 2020-03-23 17:38:47 · 146 阅读 · 0 评论 -
7. 栈实现简单的综合计算器(中缀表达式)
一、思路我们通过一个index(索引)值来遍历我们的表达式;定义两个栈,一个数栈,一个符号栈,数栈用来存入数字,符号栈用来存入符号;通过while循环遍历表达式,如果我们发现是当前索引值是数字时,定义一个字符串keepNum来暂存当前的数字,若此时索引是表达式的最后一个索引,则直接把当前索引的值压入数栈;若此时索引不是表达式的最后一个索引,通过查看索引 index+1 的值(...原创 2020-01-15 21:27:16 · 494 阅读 · 0 评论 -
6.栈
一、概念1. 定义栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。特性: 先进后出,后进先出。2. 栈的应用场景子...原创 2020-01-11 16:25:58 · 267 阅读 · 0 评论 -
5. 环形链表实现约瑟夫问题
一、概念1. 环形链表环形链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向第一个结点,整个链表形成一个环。2. 约瑟夫问题设编号为1,2,…,n 的n个人围坐一圈,约定编号为 k (1 ≤ k ≤ n) 的人从1开始报数,数到m的那个人出列,他的下一位又从1开始报数,数到m的那个人又出列,以此类推,直到所有人都出列为止,由此产生一个出队编号的队列。二、环形链表...原创 2020-01-11 14:03:58 · 219 阅读 · 0 评论 -
4. 双向链表
一、概念双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。图解:二、双向链表的相关操作1. 思路:遍历:和单链表一样的思路,只是可以向前遍历,也可以向后遍历;添加:temp.next = newNode,newNode.pre = temp ( temp表...原创 2019-12-19 21:03:19 · 154 阅读 · 0 评论 -
3.单链表
一、概念单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。节点结构:data域–存放结点值的数据域;next域–存放结点的直接后继的地址(位置)的指针域(链域)。头指针head和终端结点:...原创 2019-12-18 16:02:40 · 1474 阅读 · 0 评论 -
2. 队列
一、队列介绍队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出。二、数组模拟队列1. 思路队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中maxSize是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量front 及rear 分别记录队列前后端的下标...原创 2019-12-11 18:36:26 · 139 阅读 · 0 评论 -
1.稀疏数组
一、需求先看一个实际需求:编写的五子棋程序中,有存盘退出和续上盘的功能:分析问题:因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据。->稀疏数组二、基本介绍当一个数组中大部分元素为0或者为同一个值时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:记录数组一共有几行几列,有多少个不同的值;把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩...原创 2019-12-10 21:20:04 · 167 阅读 · 1 评论