![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 91
大扑棱蛾子
合抱之木,生于毫末;百尺之台,起于垒土;千里之行,始于足下。更多精彩文章请移步我的个人博客:http://jaune162.blog
展开
-
数据结构与算法--后缀表达式
中缀表达式转后缀表达式中缀表达式转后缀表达式的思路步骤分析。初始化一个栈和一个队列,运算符栈 S1 和存储中间结果的队列 Q1从左至右扫描中缀表达式遇到操作数时放入队列 Q1 中遇到运算符时,比较其与S1栈顶运算符的优先级如果S1为空,或栈顶运算符为左括号 ( ,则直接将此运算符入栈否则,若优先级比栈顶运算符的高,也将运算符压入S1否则,将S1 栈顶的运算符弹出并添加到Q1 中...原创 2020-04-18 20:57:41 · 972 阅读 · 0 评论 -
数据结构与算法--分治法、归并排序
分治法分治法的思想是:将原问题分解成若干个规模较小但是与原问题类似的问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解。分治法在每层递归时都有三个步骤:分解: 将原问题分解为若干个子问题,这些问题是原问题的规模较小的实例解决: 递归求解子问题,若子问题规模足够小,则直接求解合并: 合并这些子问题的解成原问题的解。归并排序归并排序就是采用分治法的思想。分解: ...原创 2020-04-16 22:26:03 · 514 阅读 · 0 评论 -
数据结构-栈的应用之中缀表达式的计算
中缀表达式就是我们所熟悉的数学算式。如:3 + 6 - 18 / 2或3 + 3 * ( 26 - 16 / 2 ) / 2 + 2 - 20。我们的目标是要实现一个计算器,来根据中缀表达式计算表达式的值。表达式由数字和+ - * / ()组成。使用两个栈来实现,一个数值栈,一个符号栈。在这里我们假设表达式都是正确的,并且数值与符号之间由空格隔开。在代码中不再判断表达式的格式是否正确。实现思...原创 2020-04-15 13:08:47 · 1876 阅读 · 0 评论 -
数据结构-栈的使用之行编辑程序
一个简单的行编辑器程序的功能是:接收用户从终端输入的程序或数据,对用户输入的一行数据做处理,#表示退格键,删除#前的一个字符。@表示@符号之前的数据均无效。比如用户输入了 gosd##od实际有效字符是good,当用户输入了pgm@progre#am实际有效的是program。思路分析将一行的字符依次读入栈中,遇到#取出栈顶数据,若遇到@则清空栈。实现import java.util....原创 2020-04-14 09:59:17 · 826 阅读 · 1 评论 -
数据结构-栈的使用之括号匹配校验
假设表达式中允许包含两种括号,圆括号和方括号,其嵌套顺序随意,即[()[]]、[([][])]和[]()[]等为正确格式,[(])或([())等均为不正确格式。要求编写一个程序检验括号输入是否正确。实现思路此题我们使用栈的后进先出的原则来实现,思路如下:如果以]或)开头那么括号肯定是不匹配的。将接收到的字符串拆分成单个字符遍历入栈若当前栈空,则直接入栈若当前栈不为空,则取出栈顶数...原创 2020-04-13 23:07:54 · 961 阅读 · 0 评论 -
数据结构-栈及其实现(使用数组和链表两种方式实现)
栈(Stack)是限定仅在表尾进行插入或删除操作的线程表。因此对栈来说表尾端有其特殊含义,称为栈顶(top),相应的表头端称为栈底(bottom)。栈是一种后进先出(last in first out)的线性表,简称LIFO。栈的抽象数据类型定义package com.codestd.study.stack;/** * 栈ADT */public interface Stack&...原创 2020-04-13 22:10:38 · 1751 阅读 · 0 评论 -
数据结构--关于链表的一些算法问题
单向链表逆序问题注意这里是单向链表,所以只能从头向尾遍历。单向链表的逆序主要有以下两种方式。使用栈的先进后出特性,将链表中的数据放入栈中然后再从栈中取出头插法,如果仅有一个元素,那么链表的逆序就是自己。如果有多个元素,顺序取出元素,然后讲后一个放到前一个的前面。这里我们只讲头插法,头插法的效率是O(n)O(n)O(n),使用栈是O(2n)O(2n)O(2n)。两个算法的时间复杂度只有...原创 2020-04-13 12:56:44 · 992 阅读 · 0 评论 -
数据结构--链表
这将会使一篇非常长的文章,请做好战斗准备链表的特点是可以用任意存储单元存储数据元素,它不要求存储单元连续。链表一般分为以下4种:单向链表双向链表单向循环链表双向循环链表下面我们对这几种链表一一介绍。ADT我们先来定义线性表的抽象数据类型。/** * 线性表 * * @author jaune * @since 1.0.0 */public interface...原创 2020-04-12 00:01:20 · 347 阅读 · 0 评论 -
数据结构--队列的实现(单向链表方式)
什么是链表在阅读本章之前,需要您知道什么是链表?说到链表,那么就需要聊一聊计算机中的存储方式。计算机中的存储方式主要分为两种,一种是顺序存储,一种是非顺序存储。可以扒一扒这篇文章看一看。链表是一种非顺序存储结构,它允许保存的数据在内存中可以不连续。链表有以下4种单向链表:每个节点有一个指针(next)指向下一个节点,最后一个节点指向null双向链表:每个节点有一个指针(next)指向...原创 2020-04-10 20:47:28 · 669 阅读 · 0 评论 -
数据结构--队列的实现(采用环形数组方式)
在阅读本文之前请先阅读《数据结构–队列的实现(采用数组方式)》 ,本文是这篇文章的延续,如果您没有阅读前文,那么您在阅读本文时可能会一头雾水。原理概述前文提到,使用数组实现队列的一个弊端。那么本文中将介绍如何去处理上文中提到的问题。在解决这个问题之前您需要先清楚模运算(modmodmod),在Java中是%。如下:2mod 3=24mod 3=12 \mod 3 = 2\\4 \mo...原创 2020-04-10 16:15:19 · 545 阅读 · 0 评论 -
数据结构--队列的实现(采用数组方式)
队列概述队列是一种先进先出的线性表(first in first out,简称FIFO)。它只允许在队列的一段插入数据,另一端取出数据。允许插入数据的一端叫做队尾(rear),允许删除的一段则称为队头(front)。队列无论在实际生活中还是在开发中都是非常常见的。比如我们去银行办理业务的排号系统就是队列。消息中间件也是队列的思想。队列ADT下面给出队列的抽象定义,在后文中我们将以此ADT...原创 2020-04-09 23:24:00 · 698 阅读 · 0 评论 -
数据结构--稀疏数组
概述稀疏数组也是一种数组,是一种多维数组的数组压缩技术。比如存在一个10×1010 \times 1010×10的数组,但是数组中只有3个元素,如果要存储的话需要占100个位置。因为数组的每个位置的元素都要存储,哪怕是0或者null。012345678900000000000100050000002000000000030300700000400000000005000000000060000...原创 2020-04-09 18:30:05 · 264 阅读 · 0 评论 -
数据结构--第二章 线性表(线性表的类型定义)
线性表: (linear_list)是最常用且最简单的一种数据结构。简言之一个线性表是n(n≥0n \ge 0n≥0)个数据元素的有限序列。其中nnn为表长,当n=0n=0n=0时,该表为空表。在稍微复杂的线性表中,一个数据元素可以由若干个数据项(item)组成。在这种情况下,常把数据元素称为记录(record),含有大量记录的线性表又称文件。在同一线性表中的元素必定具有相同的特性,即属于同一...原创 2020-03-20 15:24:11 · 1082 阅读 · 0 评论 -
数据结构 第一章 绪论
基本概念和术语数据:(data)是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。数据元素:(Data element)是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理,一个数据元素可由若干个数据项 组成,数据项是构成数据元素不可分割的最小单位数据对象: (Data Object)是性质相同的数据元素的集合是数据的一个子集数据结构...原创 2020-03-17 18:25:11 · 444 阅读 · 0 评论