![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 73
齐天大荒
欣赏一个人,始于颜值,敬于才华,合于性格,久于善良,终于人品。人生就是这样,和漂亮的人在一起,会越来越美;和阳光的人在一起,心里就不会晦暗;和快乐的人在一起,嘴角就常带微笑;和聪明的人在一起,做事就变机敏;和大方的人在一起,处事就不小气;和睿智的人在一起,遇事就不迷茫
展开
-
马踏棋盘算法
马踏棋盘算法也被称为骑士周游问题将马随机放在国际象棋的8×8棋盘Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格1、创建棋盘 chessBoard , 是一个二维数组2、将当前位置设置为已经访问,然后根据当前位置,计算马儿还能走哪些位置,并放入到一个集合中(ArrayList), 最多有8个位置, 每走一步,就使用step+13、遍历ArrayList中存放的所有位置,看看哪个可以走通 , 如果走通,就继续,走不通,就回溯.原创 2022-06-10 13:06:32 · 354 阅读 · 1 评论 -
佛洛依德算法
佛洛伊德原创 2022-06-09 13:57:46 · 115 阅读 · 0 评论 -
迪杰斯特拉算法
用这个例子[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eufQMmlG-1654683682055)(//upload-images.jianshu.io/upload_images/20256871-b3be34681e75f578.png?imageMogr2/auto-orient/strip|imageView2/2/w/939/format/webp)]给定的图图的实现此实现方法没有节点类采用邻接矩阵,并用顶点索引代表顶点邻接矩阵表示从索引的节点指向原创 2022-06-08 18:21:53 · 136 阅读 · 0 评论 -
克鲁斯卡尔算法
在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4dkzuWEz-1654601547803)(https://www.freesion.com/images/71/76c4684274c94942b4da597307416637.JPEG)]例如,对于如上图G4所示的连通网可以有多棵权值总和不相同的生成树。[外链图片转存失败,源站可能有防盗原创 2022-06-07 21:37:42 · 544 阅读 · 0 评论 -
普里姆算法
普里姆算法(Prim’s algorithm)是图中的一种算法,可在加权连通图中搜索最小生成树。该算法的作用就是根据图中权值找到连接所有顶点的最短路径,也就是连接所有顶点的最小权值之和,也是这个加权图中的最小生成树。1.选取权值最小边的其中一个顶点作为起始点。2.找到离当前顶点权值最小的边,并记录该顶点为已选择。3.重复第二步,直到找到所有顶点,就找到了图的最小生成树。假如我们有 V 表示图中的顶点个数,E 表示图中的边个数。通过邻接矩阵图表示的简易实现中,找到所有最小权边共需 [外链图片转存失败,源原创 2022-06-02 22:25:01 · 14400 阅读 · 0 评论 -
算法之贪心算法
在分析和求解某个问题时,在每一步的计算选择上都是最优的或者最好的,通过这种方式期望最终的计算的结果也是最优的。也就是说,算法通过先追求局部的最优解,从而寻求整体的最优解。贪心算法的基本步骤:1、首先定义问题,确定问题模型是不是适合使用贪心算法,即求解最值问题;2、将求极值的问题进行拆解,然后对拆解后的每一个子问题进行求解,试图获得当前子问题的局部最优解;3、所有子问题的局部最优解求解完成后,把这些局部最优解进行汇总合并,得到最终全局的最优解,那么这个最优解就是整个问题的最优解。概念性的算法描述可能大家都不太原创 2022-06-01 21:56:37 · 1634 阅读 · 0 评论 -
KMP算法
java 实现KMP算法简介KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n) 。说的简单的一点,就是一个用于在主串中,查找子串的算法。暴力解法(BF)在讲解KMP算法之前,我们得原创 2022-05-31 16:31:06 · 167 阅读 · 0 评论 -
动态规划算法
动态规划算法一、基本概念动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。由于动态规划解原创 2022-05-30 22:41:49 · 120 阅读 · 0 评论 -
数据结构之图的原理与实现
Java数据结构之图的原理与实现首先介绍了图的入门概念,然后介绍了图的邻接矩阵和邻接表两种存储结构、以及深度优先遍历和广度优先遍历的两种遍历方式,最后提供了Java代码的实现。图,算作一种比较复杂的数据结构,因此建议有一定数据结构基础的人再来学习!1. 图的定义和相关概念定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。图在数据结构中是中多对多的关系,而树则是1对多的关系,树就是一种特别的没有闭原创 2022-05-29 12:40:54 · 773 阅读 · 0 评论 -
数据结构之平衡二叉树、B树、B+树、B树
平衡二叉树、B树、B+树、B*树 理解其中一种你就都明白了1、从二分法到二叉树二分法是我们常用的一种查找算法,可以有效的提升数据找找的效率,其实现思路是:1、首先对数据集进行排序。2、找到数据集中间位置的节点。3、用查找的条件和间节点进行比较,等于则直接返回,中间节点数据小于查找条件则说明数据在排序列表的左边,大于则说明数据在排序列表的右边。比如我们要从[9,2,6,5,7,8,4,3,1] 快速查找到 7的数据那么我们做以下操作从二分法查找的过程来看,如果能保证数据的有序性,并且预先把数据原创 2022-05-28 11:06:16 · 322 阅读 · 0 评论 -
数据结构之二叉排序树
数据结构之二叉排序树1、二叉排序树定义二叉排序树也叫二叉搜索树、二叉查找树。二叉排序树树是一颗它的左子树上的节点都小于根节点,右子树上的节点都大于根节点的二叉树,且其左右子树也是二叉排序树。实例二叉树实例2、二叉排序树的创建当要向二叉排序树中插入元素的时候,从根节点开始查找,先将根节点作为当前节点,如果要插入的值比当前节点的值小,则判断当前节点的左孩子是不是空,如果是空则将要插入的值作为当前节点的左孩子,不是空则将当前节点的左孩子作为当前节点继续查找;当要插入的值比当前节点的值大时,判断当前节原创 2022-05-27 15:40:13 · 1806 阅读 · 0 评论 -
java实现赫夫曼编码实现文件的压缩与解压缩
java实现赫夫曼编码实现文件的压缩与解压缩一、基本概念哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。 赫夫曼码的码字(各符号的代码)是异前置码字,即任一码字不会是另一码字的前面部分,这使各码字可以连在一起传送,中间不需另加隔离符号,只要传送时不出错,收原创 2022-05-26 20:45:00 · 449 阅读 · 0 评论 -
数据结构之赫曼夫树(哈曼夫树)
Java实现赫夫曼树(哈夫曼树)的创建目录一、赫夫曼树是什么?1.路径和路径长度2.节点的权和带权路径长度3.树的带权路径长度二、创建赫夫曼树1.图文创建过程2.代码实现一、赫夫曼树是什么?给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度(WPL)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。图1 一棵赫夫曼树1.路径和路径长度在一棵树中,从一原创 2022-05-26 13:19:52 · 844 阅读 · 0 评论 -
数据结构之线索化二叉树
理解线索二叉树线索二叉树原理遍历二叉树的其实就是以一定规则将二叉树中的结点排列成一个线性序列,得到二叉树中结点的先序序列、中序序列或后序序列。这些线性序列中的每一个元素都有且仅有一个前驱结点和后继结点。但是当我们希望得到二叉树中某一个结点的前驱或者后继结点时,普通的二叉树是无法直接得到的,只能通过遍历一次二叉树得到。每当涉及到求解前驱或者后继就需要将二叉树遍历一次,非常不方便。于是是否能够改变原有的结构,将结点的前驱和后继的信息存储进来。二叉树结构观察二叉树的结构,我们发现指针域并没有充分的利原创 2022-05-25 23:29:11 · 186 阅读 · 0 评论 -
数据结构之顺序存储二叉树
顺序存储二叉树顺序存储二叉树的概念从数据存储来看,数组存储方式和树的存储方式可以相互转换,即 数组可以转换成树, 树也可以转换成数组要求:1) 右图的二叉树的结点,要求以数组的方式来存放 arr : [1, 2, 3, 4, 5, 6, 6]2) 要求在遍历数组 arr 时,仍然可以以前序遍历,中序遍历和后序遍历的方式完成结点的遍历顺序存储二叉树的特点:1) 顺序二叉树通常只考虑完全二叉树2) 第 n 个元素的左子节点为 2 * n + 13) 第 n 个元素的右子节点为 2 * n原创 2022-05-23 21:00:00 · 1542 阅读 · 1 评论 -
数据结构之树----二叉树
数据结构——树首先什么是树结构?树是一种描述非线性层次关系的数据结构,树是n个数据结点的集合,这些集结点包含一个根节点,根节点下有着互相不交叉的子集合,这些子集合便是根节点的子树。树的特点在一个树结构中,有且仅有一个结点没有直接前驱,它就是根节点。除了根节点,其他结点有且只有一个直接前驱每个结点可以有任意多个直接后继树的名词解释结点的度:一个结点包含子树的数量。树的度:该树所有结点中最大的度。兄弟结点:具有同一父结点的结点称为兄弟结点。树的深度(高度):叶子结点的深度(高度)为1原创 2022-05-23 15:23:51 · 126 阅读 · 0 评论 -
哈希表详解和操作代码详解
Java中的哈希表一、什么是哈希表?数组更利于元素的查找;链表更利于元素的插入和删除;那么有没有一种数据结构可以同时具有数组和链表的优点呢?即能快速地查找又能高效地插入删除元素?很明显,本文的主角“哈希表”就能很好的满足这个要求。那么哈希表是怎么做到两者的优点兼具的呢?这主要归功于它独特的数据结构。哈希表是由一块地址连续的数组空间构成的,其中每个数组都是一个链表,数组的作用在于快速寻址查找,链表的作用在于快速插入和删除元素,因此,哈希表可以被认为就是链表的数组,下图是一个哈希表的简单示意图:原创 2022-05-22 18:38:57 · 408 阅读 · 0 评论 -
递归之汉诺塔算法
汉诺塔问题详解如果你有耐心翻到这里看到这个回答,相信大部分前面的回答并没有让你完全明白汉诺塔的递归算法应该怎么理解,那么我希望这个答案会是你浏览的最后一个(不知道怎么打删除线…)。ps:篇幅稍微有点长,请耐心阅读,相信我,会有价值的。(毕竟是个人理解,若其中有不正确的地方望大家多多指正哈)要用程序来解决这个问题,我们先定义一个移动函数:**move(移动数,开始柱,中转柱,目标柱),**例如 move(2,A,B,C) 表示将2个盘子从A柱(开始柱)借助B柱(中转柱)移动到C柱(目标柱)。关于开始柱,转载 2022-05-20 15:56:09 · 12574 阅读 · 4 评论 -
查找算法之斐波那契查找算法
斐波那契(黄金分割法)查找算法(一)算法简介(1)斐波那契数列在讲算法之前,我们先介绍一下斐波那契数列,该数列公式为F(K) = F(k-1) + F(k-2),即 1、1、2、3、5、8、13、21……。我们还知道,F(k-1)/f(K)随着K的递增,该数越来越接近黄金分割比例,所以该方法也叫黄金分割法。(2)查找算法对于一个数组来说,如果数组长度为斐波那契数列中的某一个数字,那么我们就可以用黄金分割比例来分割该数组。当然,如果数组长度没有达到要求,那么我们可以尝试它扩大来满足要求,所以这就是算原创 2022-05-20 11:58:32 · 1711 阅读 · 0 评论 -
查找算法之插值查找算法
图解查找算法之插值查找(带源码)在前面我们了解了二分查找,就是把一个集合的元素一分为二,用中间值和目标查找值相比较,直到要查找的值和中间值相等,则表示查找成功,反之表示不成功。为什么这里会再次提到二分查找呢?事实上,插值查找是二分查找的升级版。用一个很简单的例子就可以把插值查找解释的很清楚。在字典里面找”boy”这个单词时,我们肯定不会从第一页开始找,而是从首字母为b的位置开始查找,然后再找到第二个字母在字母表中的位置,找到对应的位置后,重复这个过程,这样就可以快速的找到目标单词。[外链图片转存失败,原创 2022-05-19 12:26:05 · 195 阅读 · 0 评论 -
查找算法之二分查找算法
图文并茂带你入门二分查找算法原理二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,有点类似分治的思想。二分查找针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。为了方便理解,我们以数组1, 2, 4, 5, 6, 7, 9, 12, 15, 19, 23, 26, 29, 34, 39,在数组中查找26为例,制作了一张查找过程图,其中low标示左下标,high标示右下标,mid标示原创 2022-05-18 16:02:07 · 22334 阅读 · 5 评论 -
查找算法之线性查找算法
线性查找算法线性查找也叫顺序查找,这是最基本的一种查找方法,从给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程。如果元素个数为 N,那么线性查找的平均次数为: N/2代码演示/** * 线性查找 * * @author Yuan-9826 */public class SequenceSearch { public static void main(String[] args) { int[] arr = {7, 8, 9, 1, 0, 2,原创 2022-05-17 22:49:40 · 313 阅读 · 0 评论 -
经典排序算法之归并排序
归并排序一、归并排序的介绍基本介绍归并排序(MERGE- SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治( divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案修补”在一起,即分而治之)。基本思想1.把数组从中间划分成两个子数组;2.一直递归地把子数组划分成更小的子数组,直到子数组里面只有一个元素3.依次按照递归的返回顺序,不断地合并排好序的子数组,直到最后把整个数组的顺序排原创 2022-05-17 00:01:51 · 448 阅读 · 0 评论 -
经典排序算法之希尔排序
排序:希尔排序(算法)一、简介希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩小增量排序。希尔排序是非稳定排序算法。希尔排序因DL.Shell于1959年提出而得名。(注:为方便记忆算法,我习惯将其记作“三层for循环+if” ------** for(for(for(if)))**)希尔排序是基于直接插入排序的以下两点性质而提出的改进方法:1.插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。2.插入排序一般来说是原创 2022-05-16 09:47:28 · 2609 阅读 · 0 评论 -
经典排序算法之选择排序
通俗易懂讲解 选择排序选择排序介绍选择排序(Selection sort)是一种简单直观的排序算法。其基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。上面的说法可能还有点抽象,没关系,下面让我们用图来说明一切,相信大家肯定能看懂和理解的。图解选择排序以数列{20,40,30,10,60,50}为例,演示其选择排序过程(如下图)。排序流程如原创 2022-05-14 22:39:38 · 237 阅读 · 0 评论 -
经典排序算法之插入排序
插入排序一、概念及其介绍插入排序(InsertionSort),一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增 1 的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。二、适用说明插入排序的平均时间复杂度也是 O(n^2),空间复杂度为常数阶 O(1),具体时间复杂度和数组的有序性也是有关原创 2022-05-13 12:32:33 · 78 阅读 · 0 评论 -
经典排序算法之快速排序
经典排序算法之快速排序高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让***个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边,类似下面这种排列:3 1 2转载 2022-05-12 00:08:54 · 330 阅读 · 0 评论 -
经典排序算法之冒泡排序
Java算法之冒泡排序【超详细】1.1 冒泡排序分类 算法冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。冒泡排序还有一种优化算法,就是立一原创 2022-05-10 23:25:26 · 88 阅读 · 0 评论 -
经典排序算法之基数排序
经典排序算法之基数排序1. 基数排序基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。2. LSD 基数排序动图演示3.排序思路想一下平时对比两个时间大小是如何进行比较的。一般都是先对比年份,如果年份大的肯定就大。接下来再对比月份,然后日。为什么这么比较呢,因为权重不一样权重顺序是:年>月>日而基数排序的思路跟这个有点类似。将每一个数分成一原创 2022-05-09 13:48:51 · 2481 阅读 · 0 评论 -
时间复杂度和空间复杂度详解
算法时间复杂度和空间复杂度1.算法效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。2.时间复杂度2.1 时间复杂度的概念时间复杂度的定义:在计算机科学中,原创 2022-05-08 13:00:28 · 11133 阅读 · 0 评论 -
递归详解及迷宫问题解决
递归详解及迷宫问题解决递归算法是一种直接或者间接调用自身函数或者方法的算法。Java递归算法是基于Java语言实现的递归算法。递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。递归算法解决问题的特点:1)递归就是方法里调用自身。2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。4)在递原创 2022-05-06 13:01:08 · 1207 阅读 · 0 评论 -
队列详解及代码演示
数据结构(Java实现)-详谈队列1、队列介绍队列是一个有序列表,可以用数组(顺序存储)或是链表(链式存储)来实现遵循先入先出(从队尾进,队首出)的原则。即:先存入队列的数据,要先取出,后存入的要后取出。2、队列的顺序存储(数组实现)队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front及 rear分别记录队列前后端的下标,front 会随着数据输出而改变,而 r原创 2022-05-05 09:32:56 · 412 阅读 · 0 评论 -
稀疏数组原理及代码演示
稀疏数组概念当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值;把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模如下图:左边是原始数组,右边是稀疏数组。代码演示其中有还原代码package com.ma.array;public class SparseArray { public static void main(String[] args) {原创 2022-05-03 16:17:01 · 75 阅读 · 0 评论 -
单向循环链表解决约瑟夫问题
单向循环链表解决约瑟夫问题什么是单向循环链表单向循环链表基本与单向链表相同,唯一的区别就是单向循环链表的尾节点指向的不是null,而是头节点(注意:不是头指针).因此,单向循环链表的任何节点的下一部分都不存在NULL值。由于单向循环链表的特性,它在处理一些环状数据的时候十分有效.大名鼎鼎的约瑟夫环问题就可以用循环单向链表求解,下面我们会有进一步的介绍。由于单向循环链表和单向链表的差别真的不大,增添改查原理都相同。因此在这里我们不详细讲解,只提供源码。(如果你还是不理解的话,这里有单向链表原创 2022-05-02 18:48:57 · 1876 阅读 · 0 评论 -
双链表的基本操作与演示
双链表的基本操作与演示双链表节点结构如下图示:双链表节点比单链表多一个前驱指针域。基本操作代码package com.ma.linked;public class BookNode { public int id; public String name; public double price; //结点下一个结点,结点后继 public BookNode next; //结点上一个结点,结点前缀 public BookNode pre原创 2022-04-26 20:42:27 · 483 阅读 · 0 评论 -
单链表的简单操作与演示
单链表的简单操作与演示单链表单链表概念和简单的设计单链表是一种链式存取的数据结构,链表中的数据是以结点来表示的,每个结点由元素和指针构成。元素表示数据元素的映象,就是存储数据的存储单元;指针指示出后继元素存储位置,就是连接每个结点的地址数据。以结点的序列表示的线性表称作线性链表,也就是单链表,单链表是链式存取的结构。对于链表的每一个结点,我们使用结构体进行设计,其主要内容有:其中,DATA数据元素,可以为你想要储存的任何数据格式,可以是数组,可以是int,甚至可以是结构体(这就是传说中的结构原创 2022-04-25 20:24:24 · 297 阅读 · 0 评论 -
栈的基本操作与简单应用
栈的基本操作与简单应用栈的最主要特点是后进先出。栈是一种运算受限的线性表,限定仅在表尾进行插入和删除操作的线性表。栈的所有插入和删除操作均在栈顶进行,而栈底不允许插入和删除。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。基本操作代码如下package com.ma.stack;public class ArrayStack { //栈的大小原创 2022-04-24 16:28:33 · 288 阅读 · 0 评论