![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
易燃易爆炸i
小白
展开
-
数据结构--java语言实现单向带头循环单链表
目录1 单向带头循环单链表定义2 特点3 基本操作描述3.1 addindex(int index,int data)方法的图形描述3.2 remove(int key)方法的图形描述3.3 ICLinked接口中的方法定义4 代码实现5 运行结果1 单向带头循环单链表定义单向带头循环单链表是指带有一个不存储数据的head结点,该结点指向下一个数据,且之后各...原创 2019-05-11 16:45:12 · 500 阅读 · 0 评论 -
数据结构--java语言实现找出两个链表的第一个公共结点
目录1 题目描述2 解题思路3 代码实现1 题目描述输入两个链表的头结点,若两个链表相交,返回交点结点,否则,返回null2 解题思路首先,我们不难想到:若两个链表相交,肯定成“倒Y”型。所以,我们可以将长度长一点的链表先走“差值”步,再次,两个链表同时走,若相交且没有走到尾结点处,返回该结点,否则,返回null3 代码实现public ListNode Fi...原创 2019-05-23 11:47:55 · 170 阅读 · 0 评论 -
数据结构--java语言实现合并两个排序的链表
目录1 题目描述2 解题思路3 代码实现1 题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。2 解题思路对于两个已经排序的链表,我们可以定义一个虚拟结点,通过比较两个链表值的大小,完成链表的拼接工作。最后返回虚拟结点的下一结点即可。3 代码实现public ListNode Merge(ListNode li...原创 2019-05-23 12:09:54 · 379 阅读 · 0 评论 -
数据结构--Java语言实现插入排序
目录1 基本思想2实现2.1 直接插入排序2.2希尔排序1 基本思想把待排序的记录按其关键码值的大小逐个插入到一 个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。当只有一个记录时,该记录就记为有序序列,从第二个数开始进行插入排序。2实现2.1 直接插入排序当插入元素arr[i](i>=1)时,假设前面的arr[0],arr[...原创 2019-05-29 17:30:31 · 182 阅读 · 1 评论 -
Java语言用递归和非递归实现二叉树的前序遍历
目录1 递归实现1.1 思路1.2 代码2 非递归实现2.1 思路2.2 代码1 递归实现1.1 思路底层是由栈实现,若根节点非空,先打印根节点,之后递归到根节点的左孩子节点...当遇到null节点时,返回;此时第6行代码执行完毕,进入第7行代码,注意此时递归后的节点,访问到当前节点的右孩子节点又进入递归~刚开始理解递归有些难,但这要自己慢慢琢磨、摸索代码~...原创 2019-06-13 14:39:38 · 595 阅读 · 0 评论 -
数据结构--Java语言实现冒泡排序及其优化
1 基本思想冒泡排序就是将待排序的数据元素两两进行比较,每趟比较都将最大(最小)的数沉。所以我们需要定义两个循环,外层循环控制比较的趟数,内层循环控制比较的次数;对于优化的冒泡排序来说:如果前面比较的数字达到了我们的预期--按从大到小或者从小到大,则不必再进行比较,直接将外层循环向后推进即可,不必在比较数值的大小。2 代码实现//未优化的冒泡排序public static vo...原创 2019-06-04 14:56:37 · 176 阅读 · 0 评论 -
Java语言实现二叉树遍历:编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。
目录1 题目描述2 解题思路3 代码实现1 题目描述编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。2 解题思路将根据输入的先序遍历字符串创建一个二叉树,之后对该...原创 2019-06-11 13:48:55 · 3750 阅读 · 2 评论 -
Java语言用递归和非递归实现二叉树的中序遍历
目录1 题目描述2 解题思路3 递归代码实现4 非递归代码实现1 题目描述2 解题思路递归和非递归底层实现都是栈。对于递归:先一直向左遍历,直到为空时返回并且打印最左的左孩子,然后再判断该元素是否有右孩子,此时的元素再递归判断左孩子~~~和之前情形一致。 对于非递归:将所有的左孩子都入栈,定义一个top指向栈顶元素,当遍历cur到null时,可以将cur指向新...原创 2019-06-11 22:22:47 · 2901 阅读 · 0 评论 -
数据结构--java语言实现无头单向非循环链表
接口实现定义一个接口:public interface ILinked { //头插法 void addFirst(int data); //尾插法 void addLast(int data); //任意位置插入,第一个数据节点为0号下标 boolean addindex(int index,int data); //查找是否包含...原创 2019-07-30 12:00:47 · 111 阅读 · 0 评论 -
Java--关于堆的一些基本知识
-二叉树的存储结构有顺序存储和链式存储。-顺序存储是指数据存储在数组上,一般只适合表示完全二叉树;非完全二叉树一般用链式存储结构,链式存储分为二叉链和三叉链,一般普通的链表用二叉链就可以了,红黑树用的是三叉链。-大根堆:根节点的值大于左右孩子结点的值-小根堆:根节点的值小于左右孩子结点的值-堆的性质:堆中某个结点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。-堆的向下...原创 2019-08-06 09:57:27 · 119 阅读 · 0 评论 -
Java语言用递归和非递归实现二叉树的后序遍历
目录1.递归实现2.非递归实现(借助栈)1.递归实现/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; }...原创 2019-08-06 15:04:08 · 221 阅读 · 0 评论 -
数据结构--Java语言实现用两个队列实现栈
目录1 题目描述2 解题思路3 代码实现1 题目描述使用队列实现栈的下列操作:push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是push to back, peek/pop from front, size, 和is empty...原创 2019-05-27 21:53:02 · 283 阅读 · 0 评论 -
数据结构--Java语言实现有效的括号
目录1 题目描述2 解题思路3 代码实现1 题目描述给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。2 解题思路栈:里面存放左括号,当有右括号出现时,将栈顶元素出栈,进行匹配即可。共有四种情况:...原创 2019-05-27 19:30:00 · 213 阅读 · 0 评论 -
数据结构--java语言实现最小栈
目录1 题目描述2 解题思路3 代码实现1 题目描述设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x)-- 将元素 x 推入栈中。 pop()-- 删除栈顶的元素。 top()-- 获取栈顶元素。 getMin() -- 检索栈中的最小元素。2 解题思路利用两个栈集合stack和minStack:stack栈中...原创 2019-05-25 11:39:11 · 131 阅读 · 0 评论 -
数据结构--java语言实现反转单链表
目录1 题目描述2 解题思路3 代码实现1 题目描述输入一个链表,例如:12 -> 23 -> 34 -> 45 -> 56 -> null 输出:56 -> 45 -> 34 -> 23 -> 12 -> null,反转后输出新链表的表头,例如:2 解题思路首先我们拿到一个单链表,假设它不为空,且至少有2...原创 2019-05-19 19:17:47 · 192 阅读 · 0 评论 -
数据结构--java语言实现线性表的顺序存储
目录1 顺序表定义2 顺序表特点3 顺序表基本操作描述3.1 add方法图形描述3.2 search方法图形描述3.3 remove方法图形描述3.4 ISequeuece接口中的方法定义4 代码实现5 运行结果1 顺序表定义线性表的顺序存储结构是把线性表中的所有元素按照其逻辑顺序依次存储到计算机的内存单元中指定存储位置开始的一块连续的存储空间中。...原创 2019-05-10 16:16:37 · 497 阅读 · 0 评论 -
数据结构--java语言实现输入一个链表,输出该链表中倒数第k个结点
目录1 题目描述2 解题思路3 代码实现1 题目描述输入一个链表,输出该链表的倒数第k个结点2 解题思路按照常规的解题思路,我们可能会想到:将单链表遍历一遍,求出单链表的长度n,再从头开始遍历单链表n-k次,即得到了倒数第k个结点。但是这种方式无疑增加了很多功课,若单链表个数较多,要求输出前几个结点值,使得计算量增大了很多~我们设想:如何只遍历一遍单链表,就能找出倒数第...原创 2019-05-19 22:11:19 · 710 阅读 · 0 评论 -
数据结构--java语言实现将单链表以给定值x分割成两部分,并按顺序输出
目录1 题目描述2 解题思路3 代码实现4 注意事项1 题目描述编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。2 解题思路首先,我们可以定义四个结点:分别是分割后x之前的头结点和尾结点、x之后的头结点和尾结点。其次,遍历单链表,将比x值小的结点...原创 2019-05-20 16:56:43 · 697 阅读 · 0 评论 -
数据结构--java语言实现返回链表中环的入口结点,若无环,则返回null
目录1 题目描述2 解题思路3 代码实现1 题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。2 解题思路首先我们不难想到,遍历一遍单链表,若某一结点的next指向null,则说明该单链表无环,返回null;若有环,我们定义两个引用fast和slow,让fast每次走两步,slow每次走一步,它俩肯定会在某个结点处相遇,那么问题来了,我们...原创 2019-05-22 11:30:20 · 173 阅读 · 0 评论 -
数据结构--java语言判断链表是否有环
目录1 题目描述2 解题思路3 代码实现1 题目描述给定一个链表,判断是否有环。2 解题思路定义两个引用:fast和slow,在合法的情况下,让fast一次走两步,slow一次走一步,若某次遍历时fast==slow,则说明该链表有环。3 代码实现//给定一个链表,判断是否有环 public boolean hasCycle(){ No...原创 2019-05-20 17:30:48 · 204 阅读 · 0 评论 -
数据结构--java语言实现链表的回文结构
目录1 题目描述2 解题思路3 代码实现1 题目描述对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。2 解题思路大的方向分为3步:① 找到中间结点 ② 对单链表后半部分进行反转 ③ 链表向中间推进判断值是否相等具...原创 2019-05-21 13:03:12 · 245 阅读 · 0 评论 -
数据结构--java语言实现删除链表中重复结点
目录1 题目描述2 解题思路3 代码实现1 题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->52 解题思路首先,定义一个虚拟结点node,其后保存单链表中不重复的结点,最后返回node.next...原创 2019-05-22 12:22:18 · 539 阅读 · 1 评论 -
数据结构--java语言实现循环队列
目录1 题目描述2 解题思路3 代码实现1 题目描述设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能...原创 2019-05-24 22:29:42 · 1680 阅读 · 0 评论 -
数据结构--java语言实现用两个栈实现队列
目录1 题目描述2 解题思路3 代码实现1 题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。2 解题思路我们知道:栈-先进后出,队列-先进先出,如何用两个栈实现队列呢?很简单,我们可以用一个栈1进行入栈操作,另一个栈2进行出栈操作,这时我们就要分情况了:当栈2为空时,将栈1中的元素依次出栈并且将这些元素依次入到栈2,故栈1中先...原创 2019-05-25 10:57:03 · 452 阅读 · 0 评论 -
Java语言实现快排的递归与非递归及对递归的优化
目录1快排思想2递归实现代码3非递归实现代码1快排思想每次从待排序数码中选取一个“基准值”,将该数码分成两部分,左边的一部分数值都小于该“基准值”,右边的一部分数值都大于该“基准值”,递归算法每次将左右两部分数码再次进行快排,非递归则借助栈实现,具体见以下代码:2递归实现代码递归的优化可以从两方面着手:三数取中法选key和递归到小的区间时采用插入排序pu...原创 2019-08-22 17:37:50 · 242 阅读 · 0 评论