
数据结构
糯米团子沐沐
只有你想不到的,没有你做不到的
展开
-
七大排序
1. 插入排序 1.1 算法思想 将整个数组a分成有序和无序两部分,有序的部分为[0, i),无序为[i,a.length)。 每次取出无序中的第一个元素,将这个元素的值放到一个变量中,和有序部分中的每一个值都做比较,如果有序部分的值大于变量值,将有序的部分的这个值向后移动一个位置。 1.2 时间复杂度 最好: O(n) 最坏: O(n^2) 1.3 代码 //插入排序 public v...原创 2019-11-24 19:06:24 · 141 阅读 · 0 评论 -
堆结构之大根堆排序
概念 堆是一种特殊的树形数据结构,其每个节点都有一个值,通常提到的堆都是指一颗完全二叉树,根结点的值小于(或大于)两个子节点的值,同时,根节点的两个子树也分别是一个堆。 排序思想 堆排序就是利用堆(假设利用大顶堆)进行排序的方法。它的基本思想是,将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根节点。将它移走(其实就是将其与堆数组的末尾元素交换,此时末尾元素就是最大值...原创 2019-09-23 19:54:20 · 1373 阅读 · 0 评论 -
优先级队列概述
概念 优先队列是一种用来维护一组元素构成的集合S的数据结构,其中每个元素都有一个键值key,元素之间的比较都是通过key来比较。优先队列包括最大优先队列和最小优先队列。 算法分析 基于最小优先队列进行讨论,顾名思义:出队,队头元素是最小的;入队,直接在队尾插入就可以了。 时间复杂度 优先级队列依旧是队列,队列具有的属性和操作,优先级队列也都是具有的。真正影响时间复杂度的就是入队...原创 2019-09-23 19:48:26 · 220 阅读 · 0 评论 -
实现对顺序表的增删查改以及打印
下面这个代码是一开始就定义好的数组大小,现在说一下我的顺序表的大概思想吧。 增 增也就是要对组数进行插入操作,插入又分为三种情况,头插,尾插和指定下标的插入;其实也可以直接看成一种情况,那就是指定位置插入,头插也就是把位置设定成第0个元素,尾插就是把把位置设定成size所在的地方,下面我对三种情况具体分析。 头插:首先要判断数组是否已满,如果数组已满则要给反馈一个信息给用户,提示数组...原创 2019-09-09 17:55:13 · 677 阅读 · 0 评论 -
【数据结构】实现对链表的头插和尾插
对于一个链表,要对其进行插入,可以分成头插,尾插和指定位置插入,下面代码中,我只涉及到了头插和尾插。 头插 首先定义一个node,如果head的值为null,直接返回node;如果head的值不为null,将node.next指向head,再把node作为头结点,再返回head。说是两种情况,其实用后者的代码就能全部包含。 假设这是一个不为空的链表(图1),head指向的是1...原创 2019-09-08 15:30:45 · 314 阅读 · 0 评论 -
利用继承关系完成顺序表和链表对线性表的实现
在抽象类List中写出三个抽象方法,头插(pushFront),尾插(pushBack)和任意插入(insert) public class List { protected int size = 0; public void insert(int index,int element){ } public void pushFront(int element...原创 2019-09-08 08:20:26 · 673 阅读 · 0 评论 -
【数据结构】删除有序链表中重复的结点
问题: 在一个有序的链表中,删除重复的节点 分析: 1.定义两个节点 p,q和一个前驱节点 pre 2.令p 指向head,q指向head.next ,pre作为p的前驱 3.当q 指向的不为空时 1)当p 所指向的值与q不相等时,pre 指向p,p指向q,q指向q.next 2)当p 所指向的值与q相等时, pre 和 p 不动,q 向后一直移动,直到...原创 2019-09-07 17:12:34 · 586 阅读 · 0 评论 -
单链表
package jing.able.dao; import jing.able.impl.ILinked; /** * @author panjing * @describe:单链表 * @date 2019/4/3 * @time 21:06 */ public class Linked implements ILinked { class Node { ...原创 2019-04-28 10:18:34 · 269 阅读 · 0 评论 -
不带头双向链表实现
package jing.able.dao; import jing.able.impl.IDoubleLinked; /** * @author panjing * @describe: 双向链表 * @date 2019/4/7 * @time 12:03 */ public class DoubleLinkList implements IDoubleLinked { ...原创 2019-04-27 21:48:43 · 262 阅读 · 0 评论 -
简单栈的实现
package jing.able.impl; /** * @author: panjing * @describe: * @date: 2019/4/14 * @time: 15:07 */ public interface IMyStack { // 将 item 压入栈中 void push(int item); // 返回栈顶元素,并且出栈 i...原创 2019-04-27 21:40:23 · 277 阅读 · 0 评论 -
循环队列
package jing.able; /** * @author: panjing * @describe: 循环队列 * @date: 2019/4/21 * @time: 14:43 */ public class MyCircularQueue { private int front; //队头 private int rear; //队尾 priv...原创 2019-04-27 21:38:03 · 160 阅读 · 0 评论