数据结构
数据结构笔记
Chains-X ♔
做人就像松树一样,不言不语,静默着,深沉的,它有着茁壮的树干,它有着强大的内心,它的强大是低调的,它虽然不言不语,但它的一切都是天地可鉴的。
展开
-
排序介绍、冒泡排序和快速排序的实现
排序将一个数据元素的任意序列,重新排列成一个按关键字有序的序列内部排序和外部排序整个排序过程在内存储器中进行,称为内部排序由于数据量较大,内存储器无法容纳全部数据,需要借助外部存储设备来完成稳定排序和不稳定排序相同关键字元素的前后关系在排序中发生变化,则排序方法是不稳定的反之稳定无论稳定还是不稳定都能把数据排好序比较排序和非比较排序大部分排序都是通过比较来排序的有些不需要 计数排序、基数排序四类插入排序:将无序子序列中的一个或者几个记录插入到有序序列中,从原创 2020-05-27 21:31:18 · 147 阅读 · 0 评论 -
直接选择排序、堆排序和归并排序的实现
直接选择排序直接选择排序(Straight Select Sorting) 也是一种简单的排序方法,它的基本思想是:第一次从R[0] ~ R[n-1]中选取最小值,与R[0]交换,第二次从R[1] ~ R[n-1]中选取最小值,与R[1]交换,…,第i次从R[i-1] ~ R[n-1]中选取最小值,与R[i-1]交换,…,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列 // 选择排序(从小到大) pu原创 2020-05-27 21:31:01 · 264 阅读 · 0 评论 -
直接插入排序、希尔排序和二分排序的实现
直接插入排序将一个记录插入到已排好序的序列中,从而得到一个新的有序序列直接插入排序对于最坏情况(严格递减的数组),需要比较和移位的次数为n(n-1)/2;对于最好的情况(严格递增的数组),需要比较的次数是n-1,需要移位的次数是0。当然,对于最好和最坏的研究其实没有太大的意义直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1),同时也是稳定排序。void insert_sort(int a[], int n){ int i, j, k; for (i = 1; i &原创 2020-05-27 21:30:42 · 243 阅读 · 0 评论 -
哈希表结构特点、哈希表存取数据过程及解决冲突的方法
哈希表的结构和特点hashtable 散列表查询非常快结构有很多种 容易理解的顺序表+链表主结构是顺序表,每个顺序表的节点再单独引出一个链表哈希表添加数据计算哈希码(调用hashCode(),结果是一个int值,整数的哈希码取自身即可)计算在哈希表中的存储位置y=k(x)=x%11 x:哈希码 k(x)函数 y:在哈希表中存储的位置存入一次添加成功多次添加成功(出现了冲突,调用equals)和对应链表的元素进行比较,比较到最后,结果都是false,创建新节点,存储数据,并加入链原创 2020-05-27 21:30:15 · 720 阅读 · 0 评论 -
二叉查找树、平衡二叉树、红黑树、B树、B+树、B*树
二叉查找/搜索/排序树 BST (binary search/sort tree)或者是一颗空树或者具有以下性质若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值若它的右子树上所有的节点的值均大于它的根节点的值它的左、右子树也分别是二叉排序树平衡二叉树(Self-balancing binary search tree)自平衡二叉树 又称AVL树(有别于AVL算法)它是一颗空树或它的左右两个子树的高度差(平衡因子)的绝对值不超过1并且左右两个子树都是一颗平衡二叉树同时,原创 2020-05-24 14:07:16 · 259 阅读 · 0 评论 -
线性表查找(顺序查找和折半查找以及代码实现)
顺序查找存储结构可以使顺序表,也可以是链表逐个比较查询,找到返回数据或者索引,没找到返回null在各个节点查找概率相同的情况下,默认查询长度为一半长度,时间复杂度T(n) = O(n)public static void main(String[] args) { int [] scoreArr = {89, 45, 78, 45, 100, 98 ,86, 100, 65}; int score = 100; int index = search(scoreArr, score);原创 2020-05-22 14:41:33 · 3261 阅读 · 0 评论 -
网状结构(图)图的存储(邻接矩阵、邻接表)、图的遍历(深度DFS、广度BFS)、图的最短路径
图多对多关系是一种网状数据结构,图是由非空的顶点集合和一个描述顶点之间关系的集合组成其定义Graph = (V, E)V={x | x ∈某个数据对象}E = {<u, v> | P(u ,v) ∧ (u, v∈V )}V是具有相同特性的数据元素的集合,V中的数据元素通常称为顶点(Vertex)E是两个顶点之间关系的集合。P(u, v) 表示u和v之间有特定的关联属性若<u,v>∈E,则<u,v>表示从顶点u的一条弧,并称u为弧尾或起始点,称原创 2020-05-21 14:06:59 · 2920 阅读 · 0 评论 -
树的介绍以及二叉树的实现
树树状图是一种数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合每个元素称为结点(node)有一个特定的结点被称为根结点或树根(root)空集合也是树,称为空树。空树中没有结点结点的度:一个结点含有的子结点的个数称为该结点的度叶结点或终端结点:度为0的结点称为叶结点非终端结点或分支结点:度不为0的结点双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点兄弟结点:具有相同父结点的结点互原创 2020-05-20 13:44:19 · 138 阅读 · 0 评论 -
栈和队列的介绍
栈stack又称堆栈,是运算受限的线性表其限制只允许在表的一端进行插入和删除操作表中进行插入、删除操作的一端称为栈顶 top,栈顶保存的元素称为栈顶元素相对的表的另一端称为栈底 bottom当栈中没有数据元素时称为空栈向栈中插入数据元素为 进栈或入栈从栈中删除数据元素称为出栈或退栈由于栈的插入和删除操作仅在栈顶进行,后进栈的元素必定先出栈又把堆栈称为后进先出表 LIFO队列queue和堆栈一样,也是一种运行受限的线性表其限制是仅允许原创 2020-05-20 13:43:26 · 217 阅读 · 0 评论 -
线性表中顺序表的实现和单链表的实现
线性表线性表是n个类型相同的数据元素的有限序列。线性表存储结构顺序表链表顺序表的实现// 基类接口public interface List { // 返回线性表的大小,即数据元素的个数。 public int size(); // 返回线性表中序号为 i 的数据元素 public Object get(int i); // 如果线性表为空返回 true,否则返回 false。 public boolean isEmpty(); // 判断线性表是否包含数据元原创 2020-05-19 21:40:27 · 232 阅读 · 0 评论 -
算法介绍及时间复杂度和空间复杂度
算法是指令的集合,是为解决特定问题而规定的一系列操作。他明确定义的可计算过程,以一个数据集合作为输入,并产生一个数据集合作为输出。五个特征:输入:一个算法应以待解决的问题的信息作为输入输出:输出对应指令集处理后得到的信息。可行性:算法是可行的,即算法阿忠的每一条指令都是可以实现的无穷性:算法的有穷性是指算法必须能在执行有限个步骤之后终止确定性:算法对于特定的合法输入,其对应的输出是唯一的算法就是计算机解题的过程评价算法的优劣复杂度(时间复杂度,空间复杂度)算法的复杂性体现原创 2020-05-19 21:32:24 · 181 阅读 · 0 评论 -
数据结构基本概念和数据结构类型
有哪些数据结构线性表、栈、队列、串、数组、广义表、树、二叉树、图对数据结构实现添加、删除、更新、查询、排序等数据数据是描述客观事物的数值,字符以及能输入机器且能被处理的各种符号集合。数据含义广泛,除了通常的数值数据,字符,字符串是数据以外,声音,图像等一切可以输入计算机并能被处理的都是数据。数据项数据项具有原子性,是不可分割的最小数据单元。如描述学生相关信息的姓名、性别、学号等都是数据项,如红框的数据元素数据元素是数据的基本单元,是数据集合的个体,通常有若干个数据项组成,在计算.原创 2020-05-19 11:40:51 · 770 阅读 · 0 评论