
数据结构与算法(C++)
文章平均质量分 87
C++
来自海王星
目前正在学习:C/C++/数据结构/操作系统
阶段目标:进大厂
展开
-
一文秒杀二分查找所有题目
朴素二分查找 思想及实现 这是学算法的入门算法,先举个最简单的例子: 猜数字1:我心中默念一个数字,范围在1~100,你每次可以猜一个数,我会回答你大了,小了,直到猜中为止。 答:比如假设要猜的数字是38,整个过程如下: 猜测范围(1,100),猜50,大了。所以比50大的都不用考虑了,包括50。 猜测范围(1,49),猜25,小了。所以比25小的也不用考虑了,以此推论。 猜测范围(26,49)猜37,小了。 猜测范围(38,49)猜44,大了。 猜测范围(38,43)猜40,大了。 猜测范围(原创 2021-01-30 13:47:38 · 306 阅读 · 0 评论 -
高级数据结构之AVL树
AVL树的简单介绍 百度百科 AVL树又叫做二叉平衡排序树,是平衡二叉树的一种改进版本。因为普通的平衡二叉树存在左右失衡,退化为链表的风险,因此需要某种策略来进行平衡调整。AVL树是根据左右子树的树高作为调整策略。也有一种叫做SB 树(size balance tree),是根据左右子树节点的数量作为调整策略。 性质 拥有二叉排序树所有性质: 任意节点的值大于左孩子,小于右孩子。 即:通过中序遍历二叉排序树既可以得到一个有序序列。 任意节点满足左右子树高度差不大于1 失衡条件 AVL树的最重要性质就是左原创 2021-01-02 20:31:31 · 516 阅读 · 0 评论 -
链表的基本操作(C)
#include <stdio.h> #include <stdlib.h> typedef struct Node{ int data; struct Node *next; }Node, *LinkedList; //插入函数(目标链表,插入节点,插入位置) LinkedList insert(LinkedList head, Node *node, int index) { if(head==NULL) //如果目标链表为空 {原创 2020-10-06 11:42:29 · 229 阅读 · 0 评论 -
顺序表的基本操作
#include <iostream> #include <cstring> using std::cin; using std::cout; using std::endl; template <typename Type> class Vector { private: int size; //总容量 int length;//当前长度 Type *data; //指针变量,存储顺序表的首地址 public: //构造函数:输入:原创 2020-10-06 11:07:49 · 153 阅读 · 0 评论 -
矩阵算法:螺旋输出矩阵
题目:1,2,3…n*n 的数字按照顺时针螺旋的形式打印成矩阵,如下: 输入数字2,则程序输出: 1 2 4 3 输入数字3,则程序输出: 1 2 3 8 9 4 7 6 5 输入数字4, 则程序输出: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 代码: 格式要求:最后一个不带空格 #include <stdio.h> int main() { int matrix[100][100]; int m;原创 2020-09-25 18:58:32 · 520 阅读 · 0 评论 -
排序(1):冒泡排序
排序简介 排序算法是经久不衰的经典入门算法,一般认为是,给定一组数,给出从小到大排序的结果。 主要算法有:选择,插入,冒泡,归并,希尔,基数,快速,桶排序等等。每种排序有其自身的特性,适合不同的场景。分析排序算法主要从3个方面: 时间复杂度 空间复杂度 是否稳定 冒泡排序原理: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来原创 2020-09-23 09:59:15 · 181 阅读 · 0 评论