数据结构
文章平均质量分 67
蓝海萤
这个作者很懒,什么都没留下…
展开
-
AVL树概念及简单实现
为什么会有AVL树? 极端情况下的二叉搜索树效率是O(n),如果调整二叉树搜索树的高度,那么树的搜索效率会达到O(log n). ( 这里简单介绍一下二叉搜索树: 当前结点大于它的左子树结点,小于右子树的结点,中序遍历是按照升序进行排列的。并且树中没有相同的结点: 二叉搜索树的实现.) AVL树即平衡树,在二叉搜索树的前提下增加了平衡因子,使得每个结点的左右高度差不超过1. 平衡因子=右子树的高度-左子树的高度 AVL树的插入: AVL的插入和二叉搜索树一样的方法,只不过需要更新平衡因子。 1.如果在左原创 2021-01-31 00:38:33 · 206 阅读 · 0 评论 -
求栈的最小元素或者队列的最大元素
链接: https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49?tpId=13&tqId=11173&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking.原创 2020-08-01 14:40:35 · 315 阅读 · 0 评论 -
化栈为队及化队为栈
文章目录队列的实现两个栈实现队列两个队列实现栈 队列的实现 思路:用链表实现队列,先定义一个结构体QNode,里面存放数据域和指针域,因为队列只在队头和队尾进行操作,可以让两个指针分别指向队头和队尾,所以再定义一个结构体Queue里面存放两个QNode结构体的指针——front和_rear,让这两个结构体一个指向链表的头一个指向尾。然后通过Queue这个结构体里面的两个指针来对队列进行各种操作。 ...原创 2020-04-24 23:06:40 · 306 阅读 · 0 评论 -
堆的基本实现以及堆排序
Heap.h #pragma once #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> #include<malloc.h> #include<assert.h> typedef int HPDataType; typedef...原创 2019-12-25 21:41:51 · 125 阅读 · 0 评论 -
有效括号
利用栈的结构,当如果遇到左括号就存入栈中,如果遇到右括号,就将栈顶的元素进行匹配,然后出栈,直到栈为空 力扣:20题 有效的括号 栈的实现 typedef char STDataType; // 支持动态增长的栈 typedef struct Stack { STDataType* myarr; int _top; // 栈顶 int _capacity; // 容量...原创 2019-12-20 14:00:24 · 175 阅读 · 0 评论 -
带头双向循环链表的实现
List.h #pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<malloc.h> typedef int Datetype; typedef struct ListNode { Datetype date; struct ListNode ...原创 2019-12-19 10:36:45 · 106 阅读 · 0 评论 -
栈的数组实现
Stack.h #pragma once #include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<string.h> #include<assert.h> #define maxsize 10; typedef int STDataType; // 支持动态增长...原创 2019-12-19 10:25:22 · 425 阅读 · 0 评论 -
链表判断是否有环以及求环的入口点的原理
1.给定一个链表,判断链表中是否有环。 链表判断是否有环,使用快慢指针,快指针一次走两步,慢指针一次走一步,当快指针与慢指针相遇时,说明链表中有环。 问题:为什么快指针一次走两步,三次可以吗 答案:不可以,很有可能会一直错开 看图 bool hasCycle(struct ListNode *head) { struct ListNode* fast=head; struct L...原创 2019-11-28 18:38:07 · 439 阅读 · 1 评论 -
单链表的基本操作
实现的功能: 单链表的增删查改以及第pos位后插入 SL.h #pragma once #include<stdlib.h> #include<string.h> #include<assert.h> #include<stdio.h> typedef int SLTDataType;//给类型起别名 typedef struct SList {...原创 2019-11-22 20:46:52 · 120 阅读 · 0 评论 -
判断回文链表
请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 解题思路:先使用一个快慢指针,找到回文链表里面的中间结点,然后新开辟一个头节点head,将后面的链表头插到新建的head的后面,最后将两个链表进行比较。 typedef struct ListNode ListNode; bool...原创 2019-11-20 11:25:45 · 164 阅读 · 0 评论 -
时间复杂度和空间复杂度
时间复杂度 算法的时间复杂度是一个函数,它定量的描述了该算法的运行时间,算法中基本操作的执行次数为该算法的时间复杂度。 下面计算一下时间复杂度 // 计算Func2的时间复杂度? void Func2(int N) { int count = 0; for (int k = 0; k < 2 * N ; ++ k) { ++count; } int M = 10; while (M–) { ...原创 2019-11-18 21:31:13 · 179 阅读 · 0 评论 -
顺序表的基本操作,以及排序,二分查找等
arr.h文件 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> #define maxsize 1 typedef int datetype; typedef struct seqlist { datetype *myarr; size_t si...原创 2019-11-14 22:27:33 · 304 阅读 · 0 评论