数据结构
数据结构学习记录
五花尾巴
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构学习记录——中缀表达式转后缀表达式
中缀转后缀具体步骤:(1)初始化两个栈:运算符栈s1和存储中间结果的栈s2(2)从左至右扫描中缀表达式(3)遇到操作数时,将其压入s2(4)遇到运算符时,比较其与s2栈顶运算符的优先级:1)如果s1为空,或栈顶运算符为左括号“( ”,则直接将此运算符入栈2)否则,若优先级比栈顶运算符的高,也将运算符压入s13)否则,将s1栈顶到的运算符弹出并压入到s2中,再次转到(4)-1)与s1中新的栈顶运算符相比较(5)遇到括号时:1)如果是左括号"(",则直接压入s12)如果是右括号")",则依次原创 2020-07-10 21:21:35 · 294 阅读 · 0 评论 -
数据结构学习记录——前缀中缀后缀表达式及后缀实现计算器
栈的三种表达式:前缀表达式(波兰表达式)(1)前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前(2)如:(3+4)× 5-6对应的前缀表达式是 - × + 3 4 5 6前缀表达式的计算机求值:从右至左扫描表达式,遇到数字时将数字压入堆栈,遇到运算时,弹出栈顶的两个数,用运算符对它们作相应的计算(栈顶元素和次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得到的值即为表达式的结果。针对前缀表达式求值步骤如下:(1)从右至左扫描,将 6 5 4 3压入堆栈(2)遇到 + 运原创 2020-07-10 14:30:17 · 321 阅读 · 1 评论 -
数据结构学习记录——栈实现综合计算器(中缀表达式)
使用栈完成计算一个表达式的结果:数栈 numStack:存放数符号栈operStack:存放运算符思路:1、通过一个index值(索引),来遍历我们的表达式2、如果我们发现是一个数字,就直接入数栈3、如果发现扫描到的是一个符号,分如下情况解决:如果当前符号栈为空,就直接入栈如果符号栈有操作符,就进行比较,若当前操作符优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,再从符号栈中pop出一个符号,进行运算,将得到的结果如数栈,然后将当前操作符入符号栈;如果当前操作符优先级大于栈中操原创 2020-07-09 15:46:56 · 209 阅读 · 0 评论 -
数据结构学习记录——栈及用数组模拟栈
1、栈(Stack)2、是一个先入后出的有序列表3、栈是限制线性表中元素的插入和删除,智能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端为变化的一端,称位栈顶(Top),另一端为固定的一端,称为栈底(Bottom)4、根据栈的定义可知,最先放入栈中的元素在栈底,最后放入的元素在栈顶,而删除元素正好相反,最后放入的元素最先删除,最先放入的元素最后删除。栈的应用场景:1、子程序的调用:唉跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。2、原创 2020-07-09 13:51:12 · 260 阅读 · 0 评论 -
数据结构学习记录——双向链表及其在约瑟夫问题上的应用
环形链表约瑟夫问题构建一个单向的环形链表思路:1、先创建第一个节点,让first指向该节点并形成环形2、后面当我们每创建一个新节点,就把该节点加入到已有的环形链表中即可遍历环形链表:1、先让一个辅助变量(指针)curBoy,指向first节点2、然后通过一个while循环遍历该环形链表即可curBoy.next == first结束根据用户的输入,生成一个小孩出圈的顺序如:n=5,即有5个人k=1,从第一个人开始报数m=2,数2下1、需要创建一个辅助指针helper,事先应该指向环形原创 2020-07-08 16:44:05 · 262 阅读 · 0 评论 -
数据结构学习记录之单链表相关试题——方法实现
一、获取单链表节点的个数(如果是带头节点的链表,需求不统计头节点)/***@param head 链表的头节点*@return 返回的就是有效节点的个数*/public static int getLength(HeroNode head){ if(head.next == null){ //空链表 return 0; } int length = 0; //定义一个辅助的变量,这里没有统计头节点 HeroNode cur = head.next; while(cur != n原创 2020-07-07 15:56:49 · 239 阅读 · 0 评论 -
数据结构学习记录(四)——单链表之插入、修改、删除节点
链表:1、链表是以节点的方式来存储,是链式存储2、每个节点包含data域,next域(指向下一个节点)3、链表的各个节点不一定是连续存放的4、链表分带头节点的链表和没有头节点的链表,按照实际需求来确定单链表的应用实例实现水浒英雄排行榜管理1、完成对英雄人物的增删改查操作2、第一种方法在添加英雄时,直接添加到链表的尾部3、第二种方法在添加英雄时,根据排名将英雄插入到指定位置(如果有这个排名,则添加失败并给出提示)头节点:不存放具体数据表示单链表的头,其next域指向下一个节点clas原创 2020-07-07 14:32:11 · 754 阅读 · 6 评论 -
数据结构学习记录(三)——队列之数组模拟环形队列
思路分析:1、front变量的含义做调整:front指向队列的第一个元素。即arr[front]就是队列的第一个元素。front的初始值=0.2、rear变量的含义做调整:rear指向队列的最后一个元素的后一个位置,因为希望空出一个空间作为约定.rear的初始值=0.3、当队列满时,[rear + 1] % maxSize = front 【满】4、队列为空的条件,rear == front 【空】5、这样分析后,队列中有效的数据个数为(rear + maxSize - front) % maxS转载 2020-07-02 14:59:49 · 216 阅读 · 0 评论 -
数据结构学习记录(二)——队列之数组模拟队列
思路://使用数组模拟队列编写一个ArrayQueue类class ArrayQueue{ private int maxSize;//表示数组的最大容量 private int front;//指向队列头的指针 private int rear;//指向队列尾 private int[] arr;//该数组用于存放数据,模拟队列 //创建队列的构造器 public ArrayQueue(int arrMaxSize){ maxSize = arrMaxSize; arr = ne原创 2020-07-02 14:16:52 · 192 阅读 · 0 评论 -
数据结构学习记录(一)——稀疏数组
稀疏数组:当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法:(1)记录数组一共有几行几列,有多少个不同的值;(2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模二维数组 转 稀疏数组 的思路:1、遍历原始的二维数组,得到有效数据个数 sum2、根据sum创建稀疏数组 sparseArr int[sum+1][3]3、将二维数组的有效数据存入到稀疏数组稀疏数组 恢复到 原始二维数组思路:1、先读取稀疏数组的第一行原创 2020-07-01 16:23:35 · 240 阅读 · 2 评论
分享