
数据结构算法
李小白~
一个算法小白的成长历程!
展开
-
堆排序图解介绍
堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:堆在逻辑上看起来是一棵树,但堆的存储及堆排序都是在数组上...原创 2020-03-12 15:49:30 · 259 阅读 · 0 评论 -
AVL树简介
一、AVL树简介AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是...原创 2020-02-24 20:20:04 · 13479 阅读 · 2 评论 -
查找单链表倒数第k个位置上的结点(高效算法)
题目已知一个带有表头结点的单链表,结点结构为datalink在不改变链表的前提下,设计一个尽可能高效的算法,查找链表中倒数第kkk个位置上的结点。若查找成功,算法输出该结点的data域的值,并返回111,否则,只返回000。分析解决这个题目的方法有很多种:采用两遍或多遍扫描链表,先得到链表长度,再顺序扫描到L−KL-KL−K位置;采用递归算法,在递归返回位置计数,计...原创 2019-07-01 14:13:50 · 11766 阅读 · 3 评论 -
单链表原地逆置
题目是编写算法将带一单链表逆置,要求空间复杂度为O(1)O(1)O(1)。分析单链表分为带头节点和不带头节点两种,逆置思路有两种,第一种是采用头插法重新建立新的单链表,该方法直接遍历链表,每次将当前结点添加到新链表的头部;第二种是通过该表*next指针,定义三个指针*pre, *p, *r,分别表示三个连续结点,将p->next指向pre,但同时p的后继节点会断开,所以需要用r保存其后...原创 2019-07-01 10:52:13 · 17637 阅读 · 4 评论 -
删除线性表中多个元素的高效方法
题目删除线性表中所有值为xxx的元素。方法一用kkk记录顺序表中不等于xxx的元素的个数,扫描顺序表LLL,若当前元素不等于xxx,则将当前元素移动到kkk位置,若当前元素等于xxx,不做任何处理。void del_x_1(SqList &L, ElemType x){ int k = 0; for(int i=0; i<L.length; i++){ if(L.da...原创 2019-06-27 11:41:05 · 1455 阅读 · 0 评论 -
序列主元素
$a_{p1}=a_{p2}=\cdots=a_{pm}=x$,且$m>n/2(0\le p_k<n,1\le k\le m)$,则称$x$为A的主元素,,例如$A=(0,5,5,3,5,7,5,5)$,则5为主元素,又如$A=(0,5,5,3,5,1,5,7)$,则A中没有主元素。假设$A$中的$n$个元素保存在一个以为数组中,请设计一个尽可能高效的算法,找出$A$的主元素。原创 2019-06-27 16:00:02 · 687 阅读 · 0 评论 -
两个序列的中位数问题
题目一个长度为L(L≥1)L(L\ge1)L(L≥1)的升序序列S,处在第[L/2]个位置的数称为S的中位数。例如,若序列S1=(11,13,15,17,19)S_1=(11,13,15,17,19)S1=(11,13,15,17,19),则S_1的中位数是15,两个序列的中位数是含他们所有元素的升序序列的中位数,例如,若S2=(2,4,6,8,20)S_2=(2,4,6,8,20)S2=(...原创 2019-06-27 15:22:57 · 3657 阅读 · 5 评论 -
顺序表的逆转
顺序表逆转是顺表基本操作之一,本将讨论顺序表逆转的基本方法,以及用顺序表逆转解决实际题目,本文将讨论三个问题题目一顺序表逆转方法:直接循环将首尾元素交换。void Reverse(Sqlist &L){ int mid = (L.length-1)/2; for(int i=0; i<=mid; i++){ int tmp = L.data[i...原创 2019-06-27 14:33:09 · 4624 阅读 · 0 评论 -
链表公共结点问题(高效算法)
题目假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,可共享相同的存储空间,例如,"loading"和"being"的存储映像如下图所示。设str1和str2分别指向两个单词所在单链表的头结点,链表结点结构为datanext请设计一个尽可能高效的算法,找出由str1和str2所指向两个单链表共同后缀的起始位置。分析这其实是两个链表公共结点的问题;两个链表...原创 2019-07-01 15:38:53 · 2062 阅读 · 0 评论