数据结构
lucky.麒麟
一样魔前千古间,独看桑蝶化人间。一叹求魔千万年,几多轮回古葬边。
展开
-
集合框架之LinkedList源码分析
集合框架之LinkedList源码分析一、简述LinkedList是Java集合中一个全能的结构,底层采用了双向链表结构。和ArrayList也支持空值和重复值,但是使用链表实现,在插入元素效率高,但是遍历查询效率比较低。LinkedList是非线程安全的集合类,并发环境,多线程操作LinkedList,会引发不可预知的错误。优点:底层是链表,所以增删只需要移动指针,效率很高,不需要批量扩...原创 2020-01-27 10:48:37 · 262 阅读 · 0 评论 -
彻底理解回溯和递归算法
回溯算法回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“...原创 2019-02-04 14:33:21 · 24448 阅读 · 4 评论 -
Java数据结构之数组队列和循环队列的实现
队列基于数组的实现的队列// 动态数组的封装public class Array<E> { private E[] data; private int size; /** * 数组扩容 * @param newCapacity */ private void resize(int newCapacity) { ...原创 2019-01-21 17:33:11 · 200 阅读 · 0 评论 -
Java数据结构之数组栈的实现
栈栈是一种后进先出的数据结构Last In First Out (LIFO)首先依托Array组数的实现public class Array<E> { private E[] data; private int size; /** * 数组扩容 * @param newCapacity */ private vo...原创 2019-01-21 17:31:53 · 194 阅读 · 0 评论 -
Java数据结构之对数组的操作
数组的基础实现public class Array { private int[] data; private int size; /** * 构造函数 * @param capacity */ public Array(int capacity) { data = new int[capacity]; ...原创 2019-01-20 12:20:27 · 164 阅读 · 0 评论 -
Java数据结构之链表实现栈和队列
栈的实现// 栈的基本方法public interface Stack<E> { void push(E e); E pop(); E peek(); int getSize(); boolean isEmpty();}// 链表的基本方法的实现public class LinkedList<E> { p...原创 2019-01-18 15:38:13 · 600 阅读 · 0 评论 -
Java数据结构之链表的基本操作
链表 Linked List数据存储在“节点”中优点真正的动态,不需要处理固定容量的问题缺点丧失了随机访问的能力数组和链表的对比数组最好用于索引有语意。最大优点:支持快速查询链表不适合用于索引有语意的情况最大优点:动态代码实现public class LinkedList&lt;E&gt; { private Node head; private...原创 2019-01-18 14:38:51 · 563 阅读 · 0 评论 -
每天一个算法(5): 线性查找
线性查找说明:线性查找适合于存储结构为顺序存储或链接存储的线性表。 思想:对于一个顺序储存的数据,线性查找就是从这顺序数据的头开始遍历到尾,如何匹配到数据就说明查找到了,如果没有则返回没有查找到数据。 代码现实:public class Line { public static void line_search(int arr[], int tmp){ i...原创 2018-07-06 13:35:24 · 1331 阅读 · 1 评论 -
每天一个算法( 4 ) : 快速排序 ( java )
快速排序原理 : 快速排序之所比较快,是因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了。因此总的比较和交换次数就少了,速度自然就提高了。 演示 : 演示数组 : [5, 3, 2, 1...原创 2018-06-28 17:24:32 · 441 阅读 · 0 评论 -
每天一个算法(3):选择排序(java)
选择排序选择排序另一种非常基本的排序算法, 也和我上一篇写的插入排序一样将数组分为有序和无序两个部分, 而选择排序是将无序数组部分的最最小(最大)和有序部分比较交换。 示意: 原数组:[10, 3, 2, 1, 0, 5, 4, 8, 7, 9] 最小值是:0 –&gt; 下标 : 4 第0次: [0, 3, 2, 1, 10, 5, 4, 8, 7, 9] 最小值是:1 –&gt...原创 2018-06-28 12:57:11 · 222 阅读 · 0 评论 -
每天一个算法(2):插入排序(java)
插入排序就像我们整理扑克牌一样:摸起一张牌,然后将牌插入到合适位置; 示意: 需要被排序的数组: [10, 3, 2, 1, 0, 5, 4, 7, 8, 9] 第1次: [3, 10, 2, 1, 0, 5, 4, 7, 8, 9] 将3插入有序数组【10】之中 第2次: [2, 3, 10, 1, 0, 5, 4, 7, 8, 9] 将2插入有序数组【3、10】之中...原创 2018-06-28 12:07:31 · 132 阅读 · 0 评论 -
每天一个算法(1):冒泡排序(java)
冒泡排序原理 : 依次比较相邻的两个数,将小数放在前面,大数放在后面。 复杂度: 最差–&gt; O(n2) / 平均–&gt; O(n2) / 稳定性–&gt; 稳定示意图 : 原数组:[10, 3, 2, 1, 0, 5, 4, 7, 8, 9] 第1次:[3, 10, 2, 1, 0, 5, 4, 7, 8, 9] 第2次:[3, 2, 10, ...原创 2018-06-28 01:38:06 · 228 阅读 · 0 评论 -
蓝桥杯 入门训练四道题
第一题: 入门训练 Fibonacci数列重点: 在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值, 再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。 这句话已经告诉你怎么写程序了!#include <iostream>using namespace std;int main() { ...原创 2018-02-12 12:08:44 · 621 阅读 · 0 评论 -
单链表基本操作C语言实现
/** 单链表的基本操作实现*/#include<stdio.h>#include<stdlib.h>#include<time.h>#include<iostream>using namespace std;typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next;} N原创 2017-12-07 16:40:03 · 750 阅读 · 0 评论 -
顺序表C++模板实现
#include<iostream>using namespace std;const int MAXSIZE = 20;template <class T>class SqList{private: T *data; int length;public: SqList(); //构造函数 ~SqList(); // 析构函数 void Crea原创 2017-12-06 16:57:05 · 401 阅读 · 0 评论 -
顺序表基本操作C++实现
代码实现:#include<iostream>using namespace std;const int MAXSIZE = 20;class SqList{private: int *data; int length;public: SqList(); //构造函数 ~SqList(); // 析构函数 void CreatList(int a[原创 2017-12-06 16:42:42 · 9519 阅读 · 0 评论 -
顺序表基本算法的是实现
主要用了C++的的C部分的语法,定义结构体,实现了顺序表的创建、插入、删除、输出功能。#include<stdio.h>#include<typeinfo> //输出数据类型的头文件: typeid(Element).name()#include<iostream>using namespace std;#define MAXSIZE 20 //存储空间的初始分配量typedef in原创 2017-12-06 15:00:19 · 1571 阅读 · 0 评论 -
PyQt5简单小工具制作步骤:
学了几个月的python了,突然想做点自己的工具,想起自己以前用QT写C++的GUI的时候,记得用pyqt可以写GUI,就学了一周。把基本的东西都看了一遍,感觉和QT差不多!但是pyqt5 的中文资料少的可怜啊!如果又想学的朋友可以参考下我的这个小工具制作过程!先看代码import sysfrom PyQt5.QtGui import *from PyQt5.QtWidgets import *原创 2017-12-13 12:56:55 · 3614 阅读 · 0 评论