
数据结构
张超帅
哈哈哈哈哈哈
展开
-
数据结构:线性表(顺序存储结构)
顺序表的基本运算算法: 1.插入算法:for(j=L->length;j>i;j--) L->data[j]=L->data[j-1];//将data[i..n-1]元素后移一个位。L->data[j]=e; //插入元素e 对于本算法来说,元素移动的次数不仅与表长L->length=n有关,还与插入位置i有关 *当i=n+1时,移动次数为0;—>算法最好时间复杂度原创 2017-06-09 00:46:40 · 358 阅读 · 0 评论 -
红黑树
每个结点要么是红的,要么是黑的 根结点是黑的 每个叶结点(叶结点即指树尾端NIL指针或NULL结点)是黑的 如果一个结点是红的,那么它的俩个儿子都是黑的红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求: 性质1. 节点是红色或黑色。 性质2. 根节点是黑色。 性质3 每个叶节点(NIL节点,空节点)是原创 2017-09-05 23:48:42 · 167 阅读 · 0 评论 -
图
连通n个节点的有向图,至少需要n条边; 连通n个节点的无向图,至少需要(n-1)条边;原创 2017-09-23 20:24:26 · 196 阅读 · 0 评论 -
数据结构的一些概念
线性结构是一个有序数据元素的集合。[1] 常用的线性结构有:线性表,栈,队列,双队列,数组,串。 关于广义表,是一种非线性的数据结构。 常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等),图。原创 2017-09-18 10:22:10 · 368 阅读 · 0 评论 -
数据结构题目总结
对于链表的合并问题: ListNode small=new ListNode(0);与ListNode small=new ListNode(-1);没有区别,只是节点的初始值不同在合并的时候注意一开始你使用的是cur.next=pHead;这里cur的结点是没有值的,所以合并的时候应该直接使用small.next=curHead.next;而不是small.next=curHead;原创 2017-09-02 09:50:56 · 194 阅读 · 0 评论 -
红黑树
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。5点性质: 性质1. 节点是红色或黑色。 性质2. 根节点是黑色。 性质3 每个叶节点(NIL节点,空节点)是黑色的。 性质4 每个红色节点的两个子节点都是黑色。原创 2017-10-03 16:59:26 · 326 阅读 · 0 评论 -
stack,queue,hashmap的遍历
stack的遍历 增强型for循环的遍历方法for(int path:stack){//这里的path可以随便写什么 System.out.println(path+" ");}栈弹出的while遍历方式while(!stack.empty()){//栈的api中只有empty(),没有Empty()或者isEmpty(); System.out.printn(stack.pop原创 2017-10-02 22:46:18 · 334 阅读 · 0 评论 -
LeetCode:Same Tree - 判断两颗树是否相等
给定两颗二叉树,写一个函数判断这两棵树是否相等。如果两棵树的结构和各节点中保存的值是相等的,则认为这两棵树相等。解题方法本题可以采用先根遍历的方法,从上到下递归考察各节点。在任意一对节点的比较中,如果左右枝是否为空的属性和节点中的val值不相等,则认为两棵树不是同一棵树,否则继续考察。如果遍历结束后仍然不能证明这两棵树不是同一棵树,则这两棵树就是相等的/** * Definition for a原创 2017-10-03 11:07:09 · 1595 阅读 · 0 评论 -
hash算法以及解决冲突的方法
哈希表的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里。int hash = hash(key.hashCode());int i = indexFor(hash, table.length); hash表的优缺点 优点:我们知道数组的特点是:原创 2017-10-12 00:12:25 · 1771 阅读 · 0 评论 -
b树,b+树,红黑树
B树的设计目的:b树是一种平衡的多路查找树。B树是为了磁盘或其它存储设备而设计的一种多叉平衡查找树 B-树上算法的执行时间主要由读、写磁盘的次数来决定,故一次I/O操作应读写尽可能多的信息。因此B-树的结点规模一般以一个磁盘页为单位。一个结点包含的关键字及其孩子个数取决于磁盘页的大小。性质:一个m阶(一个节点有m个元素称为m阶)的B树具有如下性质: 树中每个结点至多有m个孩子。 除根结点和叶子原创 2017-10-12 13:13:25 · 511 阅读 · 0 评论 -
数据结构api用法:
在Java中要实现栈和队列,需要用到java集合的相关知识,特别是Stack、LinkedList等相关集合类型。一、栈的实现栈的实现,有两个方法:一个是用java本身的集合类型Stack类型;另一个是借用LinkedList来间接实现Stack。1.Stack实现 直接用Stack来实现非常方便,常用的api函数如下: boolean isEmpty() // 判断当原创 2017-08-15 09:26:50 · 1167 阅读 · 0 评论 -
查找
既然是查找 时间复杂度肯定不可能大于N吧 什么是ASL?平均查找长度。 ASL =∑PiCi (Pi 为查找第i个记录的概率,Ci为找到第i个记录数据需要比较的次数,Ci随查找过程的不同而不同。)动态查找和静态查找: 静态查找表只进行以下2个操作: 1.查找某个“特定”数据元素是否在查找表中 2.查找某个“特定”数据元素的各种属性 有序表、分块有序表、线性链表都是原创 2017-08-09 19:43:00 · 1765 阅读 · 0 评论 -
递归和非递归遍历二叉树
树的定义package tree;import javax.swing.tree.TreeNode;public class BinaryTreeNode { int value=0; BinaryTreeNode leftNode=null; BinaryTreeNode rightNode=null;}递归方式实现前序遍历,中序遍历,后序遍历package tree;im原创 2017-08-18 17:27:05 · 207 阅读 · 0 评论 -
线性表的链式存储结构:双链表
双链表 在线性表的链式存储结构中,每个物理节点增加一个指向后继节点的指针域和一个指向前趋节点的指针域—>双链表 双链表的优点: *从任一节点出发可以快速找到其前趋节点和后继节点。 *从任一节点出发可以访问其他节点。双链表中节点的插入和删除1.双链表的节点插入 2.双链表的节点删除原创 2017-06-09 02:13:46 · 571 阅读 · 0 评论 -
Hashtable,HashMap,HashSet异同
HashtableHashtable散列表,通过键-值对应的形式存储元素,是一种无序的数据结构。 类的定义:public class Hashtable extends Dictionary implements Map, Cloneable,io.Serializable构造函数如下Hashtable():构造一个空的散列表,初始容量为11.负载因子为0.75.Hashtabl原创 2017-07-10 21:10:29 · 299 阅读 · 0 评论 -
线性表的链式存储结构:单链表
线性表的链式存储-链表线性表中每个节点有唯一的前趋节点和后继节点 *每个 物理节点增加一个指向后继节点的指针域–>单链表 *每个物理节点增加一个指向后继节点和前趋节点的指针域–>双链表 单链表的特点 当访问一个节点后,只能接着它的后继节点,而无法访问它的前趋节点。插入节点与删除节点操作1.单链表插入节点操作:将值为x的新节点*s插入到 *p节点之后 特点:只需修改相关的节点指针原创 2017-06-09 01:46:00 · 483 阅读 · 0 评论 -
树的计算题
一个4叉树,度为4的结点个数为6,度为3的节点个数是10,度为2的节点个数是5,叶子节点个数为()设度为1的节点个数为x,度为0的节点为y。该树的分叉数为4*6+3*10+2*5+x*1 又因为节点数=分叉数+1; 节点数:6+10+5+x+y= 4*6+3*10+2*5+x*1+1 解得:y=44原创 2017-08-07 15:23:19 · 4202 阅读 · 0 评论 -
哈夫曼树
哈夫曼树不可能存在度为1的结点 生成哈夫曼树的第一步就是在结点集合中找到两个权值最小的结点,然后生成一棵二叉树 树中任意节点的权值一定大于自己的左右孩子,但不能保证一定不小于其他下一任结点的权值。设哈夫曼树中的叶子结点总数为m,若用二叉链表作为存储结构,则该哈夫曼树中总共有()个空指针域。哈夫曼树不存在入度为1 的结点,所以n0=n2+1 设哈夫曼树中的叶子结点总数为m,若用二叉链表作为存储结原创 2017-08-05 23:34:19 · 19902 阅读 · 1 评论 -
树的一些总结
二叉排序树就是二叉搜索树BST,中序遍历从小到大输出。中序遍历是递增的堆对于左右子树大小没有要求,而二叉排序树有要求,并且,大根堆和小根堆均不为二叉排序树最优树是哈夫曼树,而哈夫曼树不一定是完全二叉树。原创 2017-08-03 14:19:34 · 824 阅读 · 0 评论 -
查找的计算题
在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找关键码值11,所需的关键码比较次数为正确的二分查找应该是一次折半后,high=middle-1 或者 low=middle+1; 所以第一次查找时 high=10,low=0; middle= 0+10/2 = 5,即15; 第二次查找时 high=5-1, low =0; middle = 0+(5-1-0)原创 2017-08-09 23:30:57 · 562 阅读 · 0 评论 -
链表的简单操作代码相关
在一个单链表中,若p结点不是最后一结点。在p结点之后插入s结点的正确是 ()。 答案:s->next=p->next ; p->next=s;链表的插入或删除元素,可以理解为是将链表指针链接打断再重新衔接上的过程。 p元素之后插入s,p–>next=s 这一步肯定是需要的,但什么时候执行这一步呢?考虑到 s 的后面应该为 未插入s时 p 后面的元素,即 s–>next=p–>next ,这原创 2017-08-02 20:51:36 · 983 阅读 · 0 评论 -
链表的知识点整理
从表中任意一个节点出发可以依次访问到表中其他所有节点的结构是() 答案:循环链表若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间 答案:顺序存储选择顺序存储的情况:1.随机存取任一节点,这个是顺序表比链表快 2.在最后插入元素 链表不具有的特点是()。 答案:可随机访问任一元素链表并不合适刻画数组中有效访问的第k项操作的查找,在数组中,通过简单地原创 2017-08-02 20:56:38 · 2378 阅读 · 0 评论 -
B树与B+树
B-树 B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是另一种树。而事实上是,B-tree就是指的B树,特此说明。 B-树是一种多路搜索树,形如: 特点 1、任何一个关键字出现且只出现在一个结点中; 2、非叶子节点除原创 2017-10-03 16:36:52 · 1645 阅读 · 0 评论