java数据结构
文章平均质量分 82
weiyastory
这个作者很懒,什么都没留下…
展开
-
(第5讲)单链表(带头结点和不带头结点)
最近在看数据结构,刚开始看链表的时候,很迷糊,什么头结点,头指针,首结点的傻傻分不清楚,现在明白啦:1、只要是链表都有头指针,暂时用head表示;链表中的第一个结点称为首结点,最后一个结点称为尾结点2、头结点的存在是为了方便操作,针对单链表来说,如果带头结点的话,头指针指向头结点,头结点指向首结点;如果不带头结点的话,头指针指向首结点,如果进行插入和删除操作,必须要注意是否是在链表头进行,原创 2016-06-25 21:47:49 · 3565 阅读 · 0 评论 -
(第3讲)简单排序:冒泡。选择。插入
首先对这三种简单排序进行比较:1、冒泡package com.three;public class myBubble { public static void main(String[] args) { int[] a= {77,99,44,55, 22, 88,-96 ,11 ,0, 66,33,-5 }; mybubbl原创 2016-06-20 12:11:40 · 252 阅读 · 0 评论 -
(第4讲)栈和队列的数组实现
栈队列优先队列插入O(1)O(1)O(N)移除O(1)O(1)O(1)描述数组。链表数组。链表数组、堆特点后进先出先进先出先进先出1、栈(数组实现的顺序栈)栈是一种特殊的线性表,与线性表的差别在于:线性表的插入和删除操作可以再表中的任意位置上进行;而栈只能在栈原创 2016-06-20 16:01:47 · 411 阅读 · 0 评论 -
(第15讲)哈希表的开放地址法中的再哈希法
哈希表的开放地址发中的二次探测虽然消除了线性探测的首次聚集问题,但是又产生了新的问题:二次聚集。二次聚集产生的原因是:所有映射到同一个单元的关键字,在探测过程中执行了相同的序列。即二次聚集会发生是因为探测序列总是相同的。即步长只依赖于哈希函数,与关键字无关。在再哈希法中,步长依赖于关键字,且从第二个哈希函数中得到。如果第二个哈希函数返回一个值s,则探测序列是:x, x+s, x+2s,原创 2016-07-29 23:11:28 · 3658 阅读 · 0 评论 -
(第14讲)哈希表的开放地址法中的二次探测
Hi=(H(key)+di) MOD m i=1,2,...,k(k如果di值可能为1,2的平方,3的平方,...,称二次探测再散列。程序如下:/** * 哈希表的开放地址法中的二次探测 */package com.eleven; public class HashDoubleApp{ public static void main(Stri原创 2016-07-13 16:29:49 · 5388 阅读 · 0 评论 -
(第16讲)哈希表的链地址法
开放地址法中,通过在哈希表中在寻找一个空位解决冲突问题。这种方法是每个哈希表的单元存放一个数据项。此方法的查找和插入都是随着L剧烈增长的。链地址法中,某个数据项的关键字还是照样映射到哈希表的某个单元,但数据项本身插入都这个单元中的链表;其他同样映射到这个单元的数据项,则直接加到链表中,不需要再原始的数组中寻找空位。每个哈希表的单元存放一个或多个数据项;并且链地址法的查找和插入数据项的时间都原创 2016-07-29 23:21:57 · 1447 阅读 · 0 评论 -
(第17讲)堆的数组实现
堆:1、实际是一种完全二叉树,只有最后一层会不满,所以用数组实现,数组都会填满,不会有空缺2、堆的左右子节点都不大于父节点,即父节点大于或者等于其子节点程序如下:/** * 堆:基于数组的 * 堆实际上是一个完全二叉树,并且其左右子节点都不大于父节点(父节点大于子节点) */package com.twelve;import java.util.Scan原创 2016-07-31 20:41:20 · 1829 阅读 · 0 评论 -
(第18讲)堆排序
堆排序利用了堆的数据结构,其基本思想是:使用普通的新增将数据增加到数组中(无序的);然后利用向下筛选的方法将数组实现堆的形式;最后将堆中的数据一个个移除出来,即为排好序的数组。程序如下:/** * 堆排序:将数据无序的添加进入数组; * 再将数组转化成堆; * 再依次从堆中删除到数组 */package com.twelve;public class H原创 2016-07-31 20:44:49 · 358 阅读 · 0 评论 -
(第19讲)图
* DFS:深度优先搜索,利用栈 、栈中每个时刻的内容是:从起始点到当前顶点经过的所有顶点。可以模拟的问题有:迷宫问题。游戏仿真中(三连棋游戏,tic-tac-toe)、决策树public class DFSApp { publicstatic void main(String[] args) { Graphdfsgraph =原创 2016-08-18 18:55:41 · 338 阅读 · 0 评论 -
(第2讲)无序数组与有序数组的增删查
1、无序数组/** * 无序数组的增删查 */package com.two;import java.util.Arrays;public class WuxuArray{ //定义一个数组和他的下标 private int[] a ; private int elem; private int length; //原创 2016-06-20 12:05:53 · 2098 阅读 · 0 评论 -
(第1讲)数据结构简介
1、java数据结构的类库是: Java.util.*; 其中 包括向量、栈、库和哈希表等类型的数据结构。2、按照某种顺序对一个数据结构的内容进行重新排序的过程称为排序。基本排序比如:冒泡、选择、插入会在第三讲的时候介绍。3、某些数据结构的特性数据结构优点缺点无序数组插入快、如果知道下标,可以非常快的存取查找慢、删除慢、大小固定原创 2016-06-20 12:02:31 · 578 阅读 · 0 评论 -
(第6讲)栈和队列的链表实现
/** * 用链表实现栈:利用了不带头结点的单链表,这里的从链表头插入和从链表头删除刚好符合栈的特性:从一个端口新增,删除;又符合先进后出的特点 */package com.five;public class LinkStackAPP {public static void main(String[] args) {LinkStack stack = n原创 2016-06-25 22:01:17 · 252 阅读 · 0 评论 -
(第8讲)递归
1、三角数字 packagecom.six;publicclass TriangleApp { public static void main(String[] args){ int n = 10; System.out.println(TriangleApp.trianglewhile(n原创 2016-06-30 17:45:16 · 507 阅读 · 0 评论 -
(第9讲)高级排序
1、希尔排序:将增量应用到插入排序,然后逐渐缩小增量。 N-增量排序表示每个n个元素进行排序。常用的今个序列是由递归表达式h = 3*h+1生成的,h的初值是1。(一个容纳了1000个数据项的数组,对他进行希尔排序可以是间隔序列为364,12,1,40,13,4,最后是1的增量排序)package com.seven; public class ShellSort {原创 2016-06-30 17:46:30 · 320 阅读 · 0 评论 -
(第7讲)利用双向链表实现双端队列、优先级队列(有序数组实现、有序链表实现)
双端队列:就是一个两端都是结尾的队列。队列的每一端都可以插入数据项和移除数据项,方法可以称为insertLeft()、 insertRight()、 deleteLeft() 、deleteRight();如果严格禁止调用insertLeft()和 deleteLeft() (或禁止调用右端的操作),双端队列功能就和栈一样;如果禁止调用insertLeft()和deleteRight()方法(或相原创 2016-06-25 22:19:08 · 912 阅读 · 0 评论 -
(第10讲)二叉搜索树
二叉树是指一个节点上最对有两个子节点,分别称为左子节点和右子节点。二叉搜索树(Binary Search Tree)是指一种特殊的二叉树,但其拥有一种特性,即一个节点的左子树上所有节点中的关键值均小于这个节点;而右子树上的所有节点中的关键值总是大于等于这个节点。又称为二叉查找树或二叉排序树。/** * 二叉搜索树 */package com.eight; i原创 2016-07-13 15:49:19 · 239 阅读 · 0 评论 -
(第11讲)红黑树
二叉搜索树可快速的找到一个给定的关键字(有序数组),可以快速的插入和删除数据项(链表),但是当其极端不平衡的时候,即 当先后插入的关键字有序时,BST退化成单支树结构。此时树高n。平均查找长度为(n+1)/2,查找的平均时间复杂度在O(N)数量级上。这时就有了红黑树的产生,红黑树是指一种平衡的二叉搜索树,其有4个规则,必须遵循,因为遵循了,树就平衡了:1、每一个节点不是红的就是黑的2、原创 2016-07-13 16:10:05 · 432 阅读 · 0 评论 -
(第12讲)234树和2-3树
2-3-4树:2-3-4 树在计算机科学中是阶为4 的B树。它可以2-3-4树在O(log n)时间内查找、插入和删除。2-3-4 树把数据存储在叫做元素的单独单元中。它们组合成节点。每个节点都是下列之一:2-节点,就是说,它包含 1 个元素和 2 个儿子;3-节点,就是说,它包含 2 个元素和 3 个儿子;4-节点,就是说,它包含 3 个元素和 4 个儿子。pac原创 2016-07-13 16:19:27 · 2489 阅读 · 0 评论 -
(第13讲)哈希表的开放地址法中的线性探测
哈希表:也叫散列表(Hash table,),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数(哈希函数),存放记录的数组叫做散列表(哈希表)。线性探测:是指如果经过哈希化得到的数组下标,其对应的位置不为空或者不是被删除状态,就继续查看下一个位置,一次这样。公式如下所示:Hi=(原创 2016-07-13 16:27:08 · 1624 阅读 · 0 评论 -
(第20讲)关于排序的各种算法的汇总的题目
1、排序算法的稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。稳定的排序算法有:冒泡、插入、归并不稳定的有:选择、希尔、快排、堆排2、一个递归必须包含:终止条件和递归部分3、快排在什么情况下最弱:排有转载 2016-08-18 18:57:31 · 27761 阅读 · 0 评论