![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 67
蓝海萤
这个作者很懒,什么都没留下…
展开
-
AVL树概念及简单实现
为什么会有AVL树?极端情况下的二叉搜索树效率是O(n),如果调整二叉树搜索树的高度,那么树的搜索效率会达到O(log n).( 这里简单介绍一下二叉搜索树:当前结点大于它的左子树结点,小于右子树的结点,中序遍历是按照升序进行排列的。并且树中没有相同的结点: 二叉搜索树的实现.)AVL树即平衡树,在二叉搜索树的前提下增加了平衡因子,使得每个结点的左右高度差不超过1.平衡因子=右子树的高度-左子树的高度AVL树的插入:AVL的插入和二叉搜索树一样的方法,只不过需要更新平衡因子。1.如果在左原创 2021-01-31 00:38:33 · 200 阅读 · 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 · 291 阅读 · 0 评论 -
化栈为队及化队为栈
文章目录队列的实现两个栈实现队列两个队列实现栈队列的实现思路:用链表实现队列,先定义一个结构体QNode,里面存放数据域和指针域,因为队列只在队头和队尾进行操作,可以让两个指针分别指向队头和队尾,所以再定义一个结构体Queue里面存放两个QNode结构体的指针——front和_rear,让这两个结构体一个指向链表的头一个指向尾。然后通过Queue这个结构体里面的两个指针来对队列进行各种操作。...原创 2020-04-24 23:06:40 · 232 阅读 · 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 · 105 阅读 · 0 评论 -
有效括号
利用栈的结构,当如果遇到左括号就存入栈中,如果遇到右括号,就将栈顶的元素进行匹配,然后出栈,直到栈为空力扣:20题 有效的括号栈的实现typedef char STDataType;// 支持动态增长的栈typedef struct Stack{ STDataType* myarr; int _top; // 栈顶 int _capacity; // 容量...原创 2019-12-20 14:00:24 · 152 阅读 · 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 · 84 阅读 · 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 · 402 阅读 · 0 评论 -
链表判断是否有环以及求环的入口点的原理
1.给定一个链表,判断链表中是否有环。链表判断是否有环,使用快慢指针,快指针一次走两步,慢指针一次走一步,当快指针与慢指针相遇时,说明链表中有环。问题:为什么快指针一次走两步,三次可以吗答案:不可以,很有可能会一直错开看图bool hasCycle(struct ListNode *head) { struct ListNode* fast=head; struct L...原创 2019-11-28 18:38:07 · 409 阅读 · 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 · 116 阅读 · 0 评论 -
判断回文链表
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true解题思路:先使用一个快慢指针,找到回文链表里面的中间结点,然后新开辟一个头节点head,将后面的链表头插到新建的head的后面,最后将两个链表进行比较。typedef struct ListNode ListNode;bool...原创 2019-11-20 11:25:45 · 144 阅读 · 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 · 154 阅读 · 0 评论 -
顺序表的基本操作,以及排序,二分查找等
arr.h文件#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>#define maxsize 1typedef int datetype;typedef struct seqlist{ datetype *myarr; size_t si...原创 2019-11-14 22:27:33 · 281 阅读 · 0 评论