/*优先队列--是对队列的一种改进 *要存储的数据存在优先级--数值小的优先级高--在队头 *优先队列的实现 *1.数组:适合数据量小的情况(没有用rear+front实现) *优先队列头在items-1,队列尾在0是固定的 *2.堆:适合数据量大的情况 *优先队列的效率:插入O(N)移除O(1) *优先队列的应用:操作系统线程调度算法 * */ public class MyPriorityQueue { private int maxSize; private long[] arr;//插入…
/*线性表的数组实现 *特点:插入删除慢需要平均移动一半的数据,查找较快 *注意:有重复和无重复的数据对应的操作会有些不同 *注意数组一旦创建其大小就固定了 *Java集合长度可变是由于创建新的数组将原来旧的数据复制过去--这些附加功能牺牲了效率 *主要实现以下几个功能 *1.线性表查找 *2.线性表删除 *3.线性表的插入存储一个元素(无序数组插入) * */ public class MyArray { private long[] arr; private int items;//记录数组…
/*队列:其实也是一种操作受限的线性表 *特点:先进先出 *队尾指针:负责元素的进队 *队头指针:负责元素的出队 *注意:普通队--容易浪费空间,一般队列使用最多的就是循环队列--指针环绕 *队列的实现方式:数组/链表 *队列判空判满: *1.按照队列中元素的个数 *2.按照队头和队尾指针的关系 *存在双端队列:每端都可以插入和删除,其变形可以是操作受限的双端队列 *队列的应用:其实很多现实世界的规则都是按照排队这种思想 * */ public class MyQueue { private i…
/*有序数组:主要是为了提高查找的效率 *查找:无序数组--顺序查找,有序数组--折半查找 *其中插入比无序数组慢 * */ public class MyOrderedArray { private long[] arr; private int items; public MyOrderedArray(int max) { arr = new long[max]; items = 0; } //数组中元素的个数 public int size(){ return items; } //折半查…
文字描述 用两个数组分别存储顶点信息和边/弧信息. 示意图 算法分析 构造一个采用邻接矩阵作存储结构.具有n个顶点和e条边的无向网(图)G的时间复杂度是(n*n + e*n), 其中对邻接矩阵G.arcs的初始化耗费了n*n的时间. 借助于邻接矩阵容易判定两个顶点之间是否有边/弧相连,并容易求得各个顶点的度.对于无向图,顶点vi的度是邻接矩阵地i行(或第i列)的元素之和:对于有向图,第i行的元素之和为顶点vi的出度:第j列的元素之和为顶点vj的入度: 代码实现 /* 以数组表示法(邻接矩阵)作为…
/*用链表实现栈--链栈 * */ public class MyLinkedStack { public MyLinkedList linklist; int items; public MyLinkedStack() { items = 0; linklist = new MyLinkedList(); } public boolean isEmpty(){ return linklist.isEmpty(); } public void push(int key){ linklist.in…
Hashtable 是一个很常见的数据结构类型,前段时间阿里的面试官说只要搞懂了HashTable,hashMap,HashSet,treeMap,treeSet这几个数据结构,阿里的数据结构面试没问题. 一查才发现,这里面的知识确实不少,都很经典,因此做一个专题 通过此文章,可以了解到一下内容(我去美团,京东,阿里基本每次都问这几个问题) (1) Hashtable的存储结构 (数组+链表) (2)Hashtable的扩容原理,扩容因子0.75,bucket的初始大小11.(扩容的函数为2N+…
如果看完本篇博客任有不明白的地方,可以去看一下<大话数据结构>的7.4以及7.5,讲得比较易懂,不过是用C实现 下面内容来自segmentfault 存储结构 要存储一个图,我们知道图既有结点,又有边,对于有权图来说,每条边上还带有权值.常用的图的存储结构主要有以下二种: 邻接矩阵 邻接表 邻接矩阵 我们知道,要表示结点,我们可以用一个一维数组来表示,然而对于结点和结点之间的关系,则无法简单地用一维数组来表示了,我们可以用二维数组来表示,也就是一个矩阵形式的表示方法. 我们假设A是这个二维数组…
应用程序后在那个的数据大致有四种基本的逻辑结构: 集合:数据元素之间只有"同属于一个集合"的关系 线性结构:数据元素之间存在一个对一个的关系 树形结构:数据元素之间存在一个对多个关系 图形结构或网状结构:数据元素之间存在多个对多个的关系 对于数据不同的逻辑结构,计算机在物理磁盘上通常有两种屋里存储结构 顺序存储结构 链式存储结构 本篇博文主要讲的是线性结构,而线性结构主要是线性表,非线性结构主要是树和图. 线性表的基本特征: 总存在唯一的第一个数据元素 总存在唯一的最后一个数据元素 除…
一.队列(Queue) 队列是一种特殊的线性表,它只允许在表的前段(front)进行删除操作,只允许在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头. 对于一个队列来说,每个元素总是从队列的rear端进入队列,然后等待该元素之前的所有元素出队之后,当前元素才能出对,遵循先进先出(FIFO)原则. 如果队列中不包含任何元素,该队列就被称为空队列. Java提供了一个Queue接口,并为该接口提供了众多的实现类:ArrayBlockingQueue.Linked…