数据结构
New灬soul
编程,编程,编程。。。。。。。
展开
-
递归实现二叉树的前 中 后序遍历和查找(JAVA实现)
这里先说一下一些二叉树的性质(和前中后序遍历无关,只是记录一下)1.二叉树第i层上的结点数最多为2^i(层次:规定树中的根节点的层次为0,其他节点的层次是其双亲节点的层次数+1)2.深度为h(h>=1)的二叉树中最多有(2^h)-1个节点(深度:树的深度是指树中所有结点的层次数的最大值+1)3.对于任何一颗二叉树,若叶结点的个数为n0,度为2的结点个数为n2,则有n0 = n2+1;下面是一棵二叉树,要求前中后序遍历。1.前序遍历: 先输出父节点,再遍历左子树和右子树.原创 2020-09-17 19:07:35 · 559 阅读 · 0 评论 -
逆波兰式(后缀表达式)的计算 & 中缀表达式转后缀表达式(逆波兰式)【java实现】
一.逆波兰式(后缀表达式)计算思路:* 1.遍历逆波兰式的集合* 2.当遍历的元素为数字时,入栈 stack* 3.当遍历的元素为运算符时,stack栈弹出两个数,num2 num1,并用该运算符计算着两个数的值* 4.把计算结果再次压栈* 5.最后栈中的元素就是后缀表达式的结果代码传入的 逆波兰表达式为:4 5 * 8 - 60 + 8 2 / +逆波兰表达式转化为逆波兰集合/** * 后缀表达式转为集合 * @param express.原创 2020-09-03 17:18:10 · 1349 阅读 · 1 评论 -
数组实现栈,并计算表达式(中缀表达式)的结果(java实现)
这里主要是计算表达式的结果,比如 “2+3*3-2”,输入一个表达式,计算出最后的结果.用栈实现的思路如下:1.遍历这个表达式,通过一个变量index记录索引值2.如果发现遍历出来的字符为一个数字,则直接入栈3.如果发现遍历出来的字符为一个运算符,则分为以下情况 3.1 若运算符栈为空,则直接入栈; 3.2 如果运算符栈有运算符,则进行比较。如果当前运算符的优先级小于等于栈中的运算符的优先级, 就需要从数栈中pop出两个数字,从符号栈中pop出一个运算符...原创 2020-09-01 20:06:11 · 258 阅读 · 0 评论 -
环形链表,Josephu 问题(java实现)
Josephu 问题 Josephu 问题为:设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数到m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。创建一个孩子对象/** * 定义一个小孩儿对象 */class Boy{ private int no; private Boy nex...原创 2020-08-27 16:53:12 · 165 阅读 · 0 评论 -
双向链表的增删改查(java实现)
创建节点对象// 定义节点,每个heroNode对象都是一个节点class HeroNode2 { int no; String name; String nickName; HeroNode2 next; HeroNode2 pre; public HeroNode2(int no, String name, String nickName) { this.no = no; this.nickName = nick原创 2020-08-10 16:50:40 · 781 阅读 · 0 评论 -
单链表的增删改查,另加腾讯百度新浪面试题(java实现)
定义一个节点对象// 定义节点,每个heroNode对象都是一个节点class HeroNode { int no; String name; String nickName; HeroNode next; public HeroNode(int no, String name, String nickName) { this.no = no; this.nickName = nickName; this.n原创 2020-08-08 10:59:32 · 206 阅读 · 0 评论 -
数组模拟队列和循环队列(java实现)
一.普通队列 首先先用数组模拟一下简单的队列。对于队列,有4个元素,一个头head,一个尾tail,一个队列的最大容量maxSize,还有一个数组int[] 模拟队列。队列的主要操作有1.向队列中添加数据;2.展示整个队列中的数据;3.取出队列的第一个数据;4.得到队列的第一个数据,不取出,只展示;5.判断队列是否为空(head == tail);6.判断队列是否已满(tail == maxSize -1)。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 head及 tail...原创 2020-08-05 17:24:47 · 214 阅读 · 0 评论 -
如何仅用递归函数和栈操作逆序一个栈
从新开始学习Java了,前面学的东西都比较简单了,所以空闲时间就比较多了。闲下来的时候准备看本算法书。这些算法都是从一个叫《程序员代码面试指南IT名企算法与数据结构题目最优解著》的书中总结来的。接下来就是实现如何仅用递归函数和栈操作逆序一个栈。package com.an.stack;import java.util.Stack;public class原创 2017-07-28 23:22:28 · 352 阅读 · 0 评论 -
汉诺塔问题II
今天看了一本书上的一个汉诺塔问题,和原本的汉诺塔问题有点不一样,就记录了下来。package com.an.stack;/* * 汉诺塔问题(II) * 这里的汉诺塔修改了游戏规则,现在限制不能直接从左边的塔放到最右边,也不能从右边直接放到 * 左边,而是必须要经过中间.问:当有N层时,写出打印出的移动过程和最优移动的步数 * * 分析:如果剩下N层塔,从上到下一原创 2017-08-04 22:35:45 · 391 阅读 · 0 评论 -
汉诺塔问题(递归)
今天看了汉诺塔问题,在一本书上简单了看了个大概,没有深入的了解。先记上。#include/* 汉诺塔问题。 有n个盘子,有三根石柱,n个盘子从上到下依次为从小到大的盘子,而且在第一个石柱上面, 问题:把一个石柱上面的盘子移到第三个上面,而且一次只能移动一个,移动时小盘子必须 放在大盘子上面。求最后移动的整个过程,和 我们把n个盘子从A柱移动到C柱,问题可以变为原创 2017-08-02 22:26:46 · 290 阅读 · 0 评论