数据结构与算法基础
文章平均质量分 57
银背欧尼酱
在读硕士,自学编程一年。分享技术上的感悟心得和生活里的碎碎念,希望能对后辈有所帮助,相信分享是最好的学习方式。个人水平有限,难免有漏错,虚心接受大佬们的指教。
展开
-
数据结构进阶:二叉搜索树
文章目录前言一,二叉搜索树的概念1.1 二叉搜索树的性质1.2 二叉搜索树的操作1.3 二叉搜索树的实现1.4 二叉搜索树的性能分析总结前言本节内容介绍二叉树的升级版-----二叉搜索树。本节内容比较少,却是后面内容的重要铺垫。一,二叉搜索树的概念1.1 二叉搜索树的性质二叉搜索树又称为二叉排序树,它是一颗空树或具有以下性质的二叉树。若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。若他的右子树不为空,则右子树上所有节点的值都大于根节点的值。它的左右子树也分别为二叉搜索树。.原创 2021-07-29 16:12:39 · 168 阅读 · 1 评论 -
常见排序算法介绍和实现
文章目录前言一、排序的概念及应用1.1 排序的概念1.2 排序算法的稳定性1.3 外部排序和内部排序二,常见的排序算法2.1插入排序2.1.1插入排序基本思想2.1.2 直接插入排序的特性2.1.3 希尔排序2.2 选择排序2.2.1 基本思想:2.2.2直接选择排序2.2.3 堆排序2.3 交换排序2.3.1 冒泡排序2.3.2 快速排序2.3.3 归并排序2.4 非比较排序2.4.1 计数排序总结前言本篇文章将带大家了解另一个数据结构的重要算法:排序。本篇文章将带大家了解一些常见的排序算法,介绍他原创 2021-06-05 14:37:54 · 174 阅读 · 0 评论 -
二叉树的创建和简单操作;前序、中序、后续,层序遍历。
文章目录前言1.定义二叉树结点2.创建树3.获取结点4.计算二叉树结点和叶子结点个数5.计算树的高度6. 计算第K层结点的个数7. 查找二叉树值为X的结点8.前序,中序,后序遍历9.层序遍历10.总体代码实现总结前言本篇文章将带大家了解二叉树一些功能实现和二叉树的四种遍历方式:前、中、后、层。接下俩让我们一起来看一下吧~1.定义二叉树结点首先我们来定义二叉树的结点,这里使用孩子表示法(想了解父母孩子表示法的可以自行查阅)。孩子表示法是指该结点除了存储本结点的数值之外,还具备指向自己左右孩子的指原创 2021-06-01 12:09:22 · 810 阅读 · 11 评论 -
堆排序和TOP-K问题
文章目录前言1. 建堆的时间复杂度2. 堆的排序3. TOP-K问题总结前言1. 建堆的时间复杂度快速排序(快排)O(NlogN)以插入的方式建堆O(NlogN)向下调整来建堆O(N)2. 堆的排序堆排序即利用堆的思想进行排序。步骤:1.建堆,排升序建大堆,排降序建小堆2.排序 -->利用堆删除的思想排序。即先让头尾结点交换,再把堆中元素个数减1,将交换后的二叉树(此时已经不是堆了)利用向下调整法重新变成堆。循环往复。直到排好整个数组。代码实现//向下调整v原创 2021-05-31 21:47:18 · 299 阅读 · 4 评论 -
二叉树和堆的概念和特点
文章目录前言一、树1.1 树的概念1.2 树的特点1.3 孩子兄弟表示法二,二叉树2.1 二叉树的特点2.2 二叉树的性质2.3 二叉树存储结构2.3.1 顺序存储结构2.3.2 链式存储结构:2.4二叉树(堆)的顺序存储结构及实现2.4.1堆的概念和结构总结前言本篇文章将带大家了解二叉树和堆。二叉树和堆的外形非常相似,都是一个下宽上窄的金字塔结构,常常让人傻傻分不清楚。这篇文章将介绍二叉树和堆的概念,区别,以及他们的特点。一、树1.1 树的概念树是一种非线性的数据结构,它是由若干个有限节点组原创 2021-05-29 11:54:53 · 1617 阅读 · 7 评论 -
堆的建立及增删查改等操作
heap.c#include <malloc.h>#include <stdio.h>void Swap(DataType* left, DataType* right){ int temp = *left; *left = *right; *right = temp;}void AdjustDown(DataType array[], int size, int parent){ //默认让parent标记左孩子,因为parent可能不存在右孩子 in.原创 2021-05-25 17:18:34 · 370 阅读 · 3 评论 -
时间复杂度与空间复杂度
文章目录前言1.算法效率与时间复杂度2.空间复杂度总结前言数据结构与算法是程序员的必修课。从这篇文章开始,我们就正式进入了数据结构与算法的学习。本篇文章介绍了几个算据结构的基本概念,让我们一起看一下。1.算法效率与时间复杂度数据结构:数据结构是计算机存储,组织数据的方式,指相互之间存在一种或多种特定关系的数组元素的集合**算法:**算法就是一系列的计算步骤,用来将输入数据转化成输出结果算法效率:算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率原创 2021-05-06 11:52:16 · 1213 阅读 · 6 评论 -
顺序表和链表的区别
前言在上一篇文章中我们介绍了什么是链表和顺序表。这篇博客通过一个表格让大家更清晰的对比链表和顺序表的不同,也便于同学整理思路。总结要理解缓存利用率,就必须深入理解CPU的工作原理,在这里同学们先有一个印象,在以后的文章中会给大家详细介绍。希望这个表格能更好的帮助同学们记忆和整理思路。感谢同学们的观看...原创 2021-05-19 14:53:22 · 108 阅读 · 0 评论 -
列队用带头单链表实现
pra.c#include <malloc.h>#include <assert.h>#include <stdio.h>QNode* BuyQueueNode(DataType data){ QNode* newnode = (QNode*)malloc(sizeof(QNode)); if (newnode == NULL) { assert(0); return NULL; } newnode->data = data; n.原创 2021-05-21 15:18:45 · 216 阅读 · 2 评论 -
栈的创建和增删查改等操作C语言实现
pra.c#include "pra.h"#include <stdio.h>#include <malloc.h>#include <assert.h>//栈的初始化void StackInit(Stack* ps){ ps->array = (Stack*)malloc(sizeof(Stack) * 6); ps->capacity = 6; ps->size = 0;}//插入元素void StackPush(St.原创 2021-05-21 00:09:04 · 438 阅读 · 1 评论 -
无头单链表基本操作实现
#include "SeqList.h"#include <stdio.h>#include <assert.h>#include <malloc.h> //链表初始化 void SeqListInit(struct SeqList* ps, int initCap){ assert(ps); // 1. 申请空间 ps->array = (DataType*)malloc(initCap * sizeof(DataType)); if原创 2021-05-20 22:24:42 · 128 阅读 · 2 评论 -
双链表基本操作实现
pra.c**#include "pra.h"#include <stdio.h>#include <malloc.h>#include <assert.h>//创造节点Node* BuyDListNode(DataType data){ Node* newnode = (Node*)malloc(sizeof(Node)); if (NULL == newnode) { assert(0); return NULL; } newnod.原创 2021-05-20 22:19:00 · 84 阅读 · 0 评论 -
顺序表和链表介绍
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录本篇梗概线性表1.1顺序表1.2链表总结本篇梗概线性表线性表是N个同类型的数据元素的有限序列。常见的线性表有:顺序表,队列,链表等线性表在逻辑上是连续的,也就是连续的一条直线结构。但在物理结构不一定连续,即地址不一定连续。线性表通常以数组和链式结构的形式存储。1.1顺序表顺序表是一种线性结构,他的元素地址连续。通常采用数组存储。顺序表分类: 1.静态数据表:使用定长数组存储 2.动态数原创 2021-05-13 22:40:31 · 106 阅读 · 3 评论