
数据结构与算法
学习数据结构笔记
菜菜X
除了菜,一无所有
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
剑指offer第三题——数组中重复的数字-题目1
前言这次没什么说的,干就完了一 题目在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或3.二 思路作者提到解决此类问题有两大思路:排序。排完序,什么魑魅魍魉都可以看到。哈希表。每扫描到一个数字就把它装到对应的哈希表里面,如果发现,表中已经有了该数字,就说明该数字重复了。时间复杂原创 2020-07-03 20:15:02 · 305 阅读 · 6 评论 -
简单题目:给出一个整数,转换为16进制的字符
一 题目给出一个整数,转换成16进制的字符输出。二 问题分析利用进制转换方法:用按权展开法。然后,1500的十六进制转换结果为:5DC三 代码3.1 C实现char * convertToBase16(int num){ if (!num) { return "0"; } char * retstr = (char *)malloc(12*sizeof(char)); // 分配存放区域 memset(retstr, '0', 12原创 2020-09-07 17:36:38 · 1888 阅读 · 0 评论 -
简单的题目:n个元素的数组,比较1.5n次,求出最大值和最小值
一 问题碰到一个好玩的题目,要求只比较1.5n次,就要求出n个元素数组中的最大值和最小值。二 问题分析就一般的全遍历方法来说,n个元素数组要得到最大值和最小值,就要比较2*n次,因为得到最小值需要比较n次,得到最大值也需要比较n次,这样得到最大值和最小值就需要比较2*n次了。想要只比较1.5n次,可以一次拿出两个数进行比较,然后一次比较三次,这样下来,总共比较的次数就是n / 2 * 3 = 1.5n,正好。1.5n次比较的思路是:取出两个数,这两个数之间先比较一次,产生大者tmax和小者tm原创 2020-09-07 15:03:21 · 688 阅读 · 0 评论 -
归并排序——递归和迭代
一 前言不想写前言,归并排序,我好像搞了一下午,我的妈,我在干啥,我,要命啊。不搞了,不来了,简单做下记录。只记录两种代码。递归迭代二 代码2.0 例子用归并排序排它。2.1 迭代数据元素下标从1开始。下标为0的数据不用。需要改进成从0开始,等我想了再改吧A 主调函数#include <iostream>#include <stdio.h>using namespace std;// 函数声明void merge_sort(int a[原创 2020-07-22 20:44:33 · 552 阅读 · 1 评论 -
数据结构,学你,我有话说——堆排序
一 前言数据结构,学后面的忘记前面的,学完前面的忘记后面的,何解?图形化它,强记它,能够按自己的思路复现它一次,不行再来一次,还不行再来一次!!二 正文学习数据结构,对我来说,比较舒服的方式:提炼出问题,到底 求 什么?图形化描述其实现过程编程实现(找个例子跟着做更好)判断条件 怎么实现核心问题编程实现一次简单运行优化三 举个例子——堆排序3.1 堆排序是啥堆排序是选择排序的一种,目的是利用最大堆的特点(最大堆就是根结点是最大值),得到我们想要的最大;然后把这个最大值交原创 2020-07-22 12:36:21 · 245 阅读 · 0 评论 -
丑陋的二叉树序列化与反序列化
一 前言本宝宝好好的上午,本来打算把操作系统的视频刷两章,然后看到labuladong大佬更新微信文章了,忍不住看了一把,一般我是不看的,因为看不懂啊,我好菜啊。但是,今天我忍不住点开了,一看,二叉树的序列化与反序列化,这个东东是啥啊。二叉树,我学过哎,我可以。然后看了下,发现二叉树的序列化就是:将一颗二叉树,转换成一维的序列。二叉树的反序列化就是:从一维的序列,生成一颗二叉树。感觉,我可以做哎。然后看了下代码,emmmm,作为一个只会C,C++的特性基本不会啥的菜鸡,咦,也能看懂。但是我不懂原创 2020-07-21 11:34:26 · 350 阅读 · 0 评论 -
相向上升冒泡排序的改进
一 前言冒泡排序好啊,它为什么好,看这个冒泡的几种姿势——吃饱了撑的冒泡排序。但是,也存在问题啊,问题是啥呢:当然,冒泡排序算法还有改进的空间,因为存在情况:总共6个数据,全部排序需要5遍,但是可能第3遍就已经从小到大排好了,第4遍,第五遍就没必要去排了,所以,可以据此进行改进。二 问题第3遍就排好了,我第4遍、第5遍就没必要了三 改进3.1 改进思想设置一个flag,当排序过程中,没有发生逆序变换时,就结束排序。3.2 准备为改进冒泡排序程序相向-上升-冒泡排序算法void原创 2020-07-16 11:53:14 · 234 阅读 · 0 评论 -
冒泡的几种姿势——吃饱了撑的冒泡排序
前言冒泡排序,乃是一种经典的排序方式,属于交换排序,它是一种稳定的、原地的(空间复杂度O(1))、时间复杂性O(n)的排序方式。在实际学习过程,发现,有好多冒泡泡的方法,不知道该使用哪种好,于是,通通记录一遍。一 上升法1.1 简单示意j游标是本遍扫描的终点,其移动方向为从左向右,终点是n-2(倒数第二个元素);i游标是上升的泡泡,小的泡泡上去,其移动方向是从右向左,终点是j,如果把数组"0在上,n-1在下的立起来",那就是上升了。1.2 上升法代码void bubble_sort(int原创 2020-07-16 11:41:15 · 277 阅读 · 0 评论 -
Fibonacci数列与二叉平衡搜索树
前言在学习二叉平衡检索树的时候,有一个题,求5层AVL树至少拥有多少个结点?然后去百度,找到了答案。于是我来记录一下一 背景1.1 AVL树AVL树是一种平衡树,即二叉树的右、左子树的高度差不超过1。前苏联学者Adelson-Velskii和Landis的名字命名。1.2 为什么要二叉平衡检索树二叉平衡检索树 = 检索树 + 平衡树检索树的时间复杂度为:O(logn)<T(n)<O(n)O(logn) < T(n) < O(n)O(logn)<T(n)<原创 2020-06-29 21:59:46 · 857 阅读 · 0 评论 -
检索树--删除算法
前言为了记录下检索树删除算法,我来发个博客开心一下。一 简要1.1 基本原则如何删除二叉树的元素?通常删除以此元素为根的子树如何删除检索树中的元素?通常仅删除此元素且保中序有序1.2 步骤想要删除检索树中的结点,步骤:找到要删除结点找到要删除结点的父结点找到要删除结点自己找到删除删除结点该结点是叶子该结点只有一个儿子:只有左儿子或者只有右儿子(同时要区分,该结点是它爹的哪个儿子,左儿子还是右儿子)该结点有两个儿子:该结点的左儿子没有右儿子:原创 2020-06-29 19:10:27 · 685 阅读 · 0 评论 -
C++和C数据结构 链表 结点写法
问题描述在C++数据结构中,结点定义写法:// Definition for singly-linked list.struct SinglyListNode { int val; SinglyListNode *next; SinglyListNode(int x) : val(x), next(NULL) {}};在C数据结构中,结点定义写法:typedef struct linkednode{ int val; struct linkednode * nex原创 2020-05-20 21:25:09 · 1253 阅读 · 0 评论 -
1. 都删除了链表,你还用那个链表
一 问题描述在学习数据结构链表的时候,做了一个题目稀疏多项式求和问题。在写完参考答案add_n(p, q)函数后,又自己写了一个函数addpolymerization(p,q),两个函数内容一样,在主函数中调用这两个函数:int main(int argc, char** argv) { int x, t; ptr p, q, L, S; // 创建单向加头循环链表 cout << "input p: " << endl; p = createLinkedli原创 2020-05-19 14:08:21 · 172 阅读 · 0 评论 -
简单链表结点与头指针内存分析
问题描述问题一:今天在学习数据结构——链表的过程中,突然想搞明白一下,简单链表,它一个结点占据多大内存啊。typedef struct linkednode{ int data; struct linkednode * next; } snode, *ptr; ptr head; 问题二:另外,还有菜鸡的我心中一直有一个疑问,头指针head,它占据多大内存啊,是和一个结点一样大的内存吗?还是只是一个指针所占据的内存大小啊。结论首先问题一,结点用的是结构体定义,结构体所占据内存原创 2020-05-17 17:59:53 · 1517 阅读 · 1 评论 -
那个算法复杂度O(nlogn)是什么意思啊
前言以前一直疑惑为什么算法复杂度会蹦出一个nlog(n)nlog(n)nlog(n)出来,怎么会有这个东东啊。然后今天,我看到我二分法的笔记,又来了算法复杂度nlog(n)nlog(n)nlog(n),于是我迈出了我学习的第一步,我决定去搞懂它。一 提出问题// 迭代int binary_search(int a[], int n, int x){ int left, right, m...原创 2020-04-23 14:23:54 · 6249 阅读 · 0 评论 -
数据结构与算法图解比喻内在化学习
VersionDateByChangeCostA2020-3-17AYZPFirst Version七分前言学习目的1) 掌握数据结构知识2) 更好的理解与记忆学习路线1) 看视频 -> 中国大学MOOC视频2) 看书 -> 《大话数据结构》《算法图解》3) 结合高效学习的方法:比喻法、以项目为导向4) 把数据结构图形化、视觉化。...原创 2020-03-17 21:45:50 · 360 阅读 · 0 评论