数据结构
文章平均质量分 85
ZJE_ANDY
这个作者很懒,什么都没留下…
展开
-
Java数据结构-------HashSet
来说说HashSet。如果有点Java基础的童鞋,应该都知道List和Set都实现自Collection,List保证元素的添加顺序,元素可重复。而Set不保证元素的添加顺序,元素不可重复。创建一个 HashSet如下:Set<String> strSet = new HashSet<>();//new了一个HashSetnew了一个HashSet,前面的文章已经说过很多次了,只要是看到new,这货肯定在堆内存里开辟了一块空间,先找到HashSet的构造函数看看,看转载 2021-02-01 16:32:59 · 233 阅读 · 0 评论 -
B树和B+树
一、BST树到AVL树到B树的简介1.1 BST树 --- 二叉排序树特点:1. 根节点的值大于其左子树中任意一个节点的值2. 根结点的值小于其右节点中任意一节点的值3. 这一规则适用于二叉查找树中的每一个节点。好处:查询的时间复杂度比链表快,链表的查询时间复杂度是O(n),二叉排序树平均是O(logn)。二叉排序树越平衡,越能模拟二分法,所以越能想二分法的查询的时间复杂度O(logn)。二叉排序树如下图:不足:但是BST树有一个不足的地方,就是如果插.原创 2021-01-12 12:40:48 · 47307 阅读 · 41 评论 -
AVL树
一、AVL树-----平衡二叉搜索树1.1 什么是二叉搜索树(BST树)?二叉搜索树的两个特点:根结点的值大于左子树上任意一个结点的值。 根结点的值小于右子树上任意一个结点的值。1.2 AVL树的特点拥有二叉搜索树的特点 AVL树上任意两个子树的高度差最大为1。 AVL树的 查找、插入、删除在平均和最差的情况下的时间复杂度都是O(logn)。1.3 AVL树调整结构1.3.1 平衡因子平衡因子:某个结点的左子树高度减去右子树高度得到的差值。AVL树:所...原创 2021-01-11 13:57:26 · 3133 阅读 · 1 评论 -
Java----------哈希表HashMap归纳
一、什么是哈希表在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能。数组:采用一段连续的存储单元来存储数据。可以随机访问,所以对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找等,可将查找复杂度提高为O(logn);对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也为O(n)。线性链表:对于链表的新增,删除等操作(在找到指定操作位置后),仅需处理结原创 2020-11-12 19:27:31 · 306 阅读 · 1 评论 -
深度优先搜索(DFS)和广度优先搜索(BFS)
一、深度优先搜索DFS和广度优先BFS的 区别:BFS是队列的思想。DFS是栈的思想。BFS思想:BFS是队列的思想。如下图:BFS从起点A,把A附近的点(B、C)先遍历,遍历完(B、C)入队,然后再以B为起点,遍历B点附近的未被遍历过的点。呈现扩散趋势。所以以下图为例,以A点为起点,BFS遍历的顺序是:[ A,B,C,D,E,F ]DFS思想:DFS是栈的思想。...原创 2020-04-28 23:07:40 · 612 阅读 · 0 评论 -
数据结构----树的遍历方式 [前、中、后序、层次遍历](python3)
树的 遍历大类分成 [深度优先]和[广度优先]其中 [深度优先] 又分为最常用的:前序遍历,中序遍历,后序遍历。前序遍历:(根左右)前序遍历可以简单记成“根左右”,就是先遍历根结点,再按深度遍历根的左、右结点。如上图所示。class TreeNode(): #树结点 def __init__(self,x): self.val = x ...原创 2020-04-04 15:38:08 · 1298 阅读 · 0 评论 -
python3 数据结构----链表
python使用链表单链表:import gc #垃圾回收class ListNode: #结点类 def __init__(self, x): self.val = x self.next = Noneclass LinkedList: #链表类 def __init__(self): self.__he...原创 2019-12-13 11:23:45 · 2644 阅读 · 0 评论 -
Java 栈Sack和队列Queue的用法
(一)栈import java.util.Stack;public class Sack { public static void main(String[] args) { Stack s = new Stack(); // Stack 是泛型的 s.push("I"); s.push("am"); s.push("HappY!"); Sy原创 2017-12-31 22:29:38 · 479 阅读 · 0 评论 -
只有头指针的单链表逆序
void reverse(linklist &L){ p=NULL; q=L; while(q!=NULL) {L=q->next;q->next = p;p=q; q=L;} L=p;}原创 2017-11-16 11:57:14 · 497 阅读 · 0 评论 -
C语言 合并有序顺序表
思路: 如有有序表A,B: A:1 2 4 5 5 B:2 3 3 6 71.一开始 i 指向 A的开头元素(即1),同理 j 指向 B开头元素(2)2.A[i] 和 B[j] 中对比,选较小的放入新表C中 核心代码:bool func(SeqList A,SeqList B,SeqList C){ if(A.length + B.length >原创 2017-09-01 11:20:05 · 2062 阅读 · 0 评论 -
C语言 数组循环左移问题
如有元素个数为n的序列: abcdefgh 要求循环左移 p位(如设置p=3),则要求操作后的序列从 abcdefgh 变为: defghabc把 abc 设为序列A,defgh设为序列B先将 A 逆置得到 cba再将 B 逆置得到 hgfed得到 cbahgfed再整个序列逆置一次即得到 defghabc 即BA这是有公式的:逆置代码:void原创 2017-09-01 15:19:05 · 4580 阅读 · 4 评论 -
C语言 逆序输出单链表(递归)
对于单链表而言,顺序输出十分简单,但逆序输出则有点难度,因为每个结点都只有后继指针,而没有前驱指针。但我们实现逆序输出,并不需要先把单链表整个逆置过来。只需要采取栈的思想,即递归即可非常简单地实现单链表的逆序输出。代码:void R_Print(LNode* L){ if(L->next !=NULL) { R_Print(L->next); } printf原创 2017-09-02 09:38:26 · 7997 阅读 · 6 评论 -
C++类实现二叉树的构建和遍历
#include#include #include using namespace std;/*二叉树的结构体*/typedef struct BTree{ int val; struct BTree *left,*right; }BTree;/*二叉树的类,包含着操作二叉树的各种方法*/ class Tree{ public: BTree *create_node原创 2017-02-06 17:03:56 · 11970 阅读 · 0 评论 -
给出一个头结点让单链表逆序
1.思路:思路:(如上图)1.首先把链表分成两部分:头结点和头节点下一个结点作为一组A,首先的作为另一组B。2.把B组的结点,依次放到Head和Current之间。3.最后把Head指回Current就完成了。原创 2017-03-22 13:22:02 · 886 阅读 · 0 评论