自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 排序算法(冒泡、选择、插入、快速、归并、堆)

排序算法的稳定性:在待排序的数组中,如果有值相同的数据,排序过程中如果无论如何都不会改变它们俩的前后顺序,则认为该排序算法是稳定的注意:算法的时间复杂度并不能完全地代表算法的实际执行时间,有些时候看似复杂度高的算法反而速度快冒泡:数据左右进行比较,把最大的数据交换到最后,特点是该算法对数据的有序性敏感,在排序过程中如果发现有序可以立即停止,如果待排序的数据基本有序时,冒泡排序的效率非常高。时间复杂度:最优:O(n) 平均:O(n^2)稳定的选择:假定最开始的位置是最小值并记录下标min,

2022-03-16 17:18:00 436

原创 算法(分治、查找算法(顺序、二分、块、哈希))

输入:算法具有0个或多个输入。输出:算法至少有1个或多个输出。有穷性:算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成。确定性:算法中的每一步都有确定的含义,不会出现二义性。可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完。如何评价一个算法由于计算机的性能不同,无法准确地统计出某个算法执行所需要的时间所以我们使用算法执行的次数来代表算法的时间复杂度O(频次) 一般忽略影响不大的常数常见的时间复杂度: //O(1) printf(

2022-03-13 10:19:24 997

原创 数据结构---图、无向图、有向图、邻接矩阵、图的遍历、邻接表、十字链表、邻接多重表

图形(Graph)结构什么是图形结构:由有穷且非空的顶点和顶点之间的边组成的集合通常表示: G(V,E) G表示一个图,V是图中顶点(元素)集合,E是图中边(元素之间的关系)的集合无向图:边用(A,B)方式表示,点与点之间是互通的在无向图中,任意两个顶点之间都有边,该图称为无向完全图,则含有n个顶点的无向完全图有 n*(n-1)/2 条边有向图:边用<A,B>方式表示,仅表示从A点到B点有边,有向图中边也叫做弧,A是弧尾,B是弧头在有向图中,任意两个顶点之间都有方向相反的两

2021-12-15 20:49:09 950

原创 平衡二叉树(代码)

#include<stdio.h>#include <stdlib.h>#include <stdbool.h>typedef struct TreeNode{ int data; struct TreeNode* left; struct TreeNode* right;}TreeNode;TreeNode* create_node(int data){ TreeNode* node = malloc(sizeof(TreeNode)); n

2021-12-12 14:53:02 1753 3

原创 题目(二叉树)

1、把一棵二叉树转换为它的镜像树// 转换成镜像树void mirror_tree(TreeNode* root){ if(NULL == root) return; TreeNode* temp = root->left; root->left = root->right; root->right = temp; mirror_tree(root->left); mirror_tree(root->right);}2、输入两棵二叉树A、B

2021-12-02 08:48:53 809

原创 二叉树的遍历(前序、中序、后序、层序)

二叉树的遍历:前序:根 左 右中序:左 根 右后序:左 右 根注意:前中后由根节点决定,并且左右子树的次序不能改变注意:根据前序+中序 或者 后序+中序 可以还原出一棵树,但是前序+后序是无法还原的层序遍历:从上到下,从左到右来遍历一棵树,必须配合队列使用前序// 前序void _dlr_show(BinTree* tree,size_t index){ // index 是节点的编号,index-1是节点的下标 if(index-1 >= tre

2021-11-27 22:28:47 247

原创 数据结构---树、二叉树、有序二叉树、线索二叉树、选择树(胜者树、败者树)、堆、平衡二叉树、红黑树

树1、树的基本概念一种表示层次关系(一对多)的数据结构有且仅有一个特定的节点,该节点没有前驱,被称为根节点。剩余的n个互不相交的子集组成,其中的每一个子集也都是一棵树,被称为根节点的子树注意:树型结构具有递归性(树中有树)2、树的表示方法:倒悬树、嵌套法、凹凸法3、树的专业术语(不同资料略有不同) 节点:组成树的基础元素,同时它也可以是一棵树 节点的度:该节点子树的数量 树的度:树中的节点的数量 节点的层次:根节点层次为1,它的孩子层次为2,孩子的孩子层次为3,以此类推 树的深度/高

2021-11-27 22:17:53 271

原创 通用链表(list.h list.c)

list.h#ifndef LIST_H#define LIST_H#include <stdbool.h>// 比较函数 类型重定义typedef int (*Comper)(const void*,const void*);// 设计链表节点typedef struct Node{ void* ptr; struct Node* prev; struct Node* next;}Node;// 设计通用链表typedef struct List{

2021-11-25 15:56:30 596

原创 数据结构---表

表顺序表:array 数据项: 存储元素的内存首地址 表的容量 元素的数量注意:1、不要越界2、时刻保持元素的连续性优点:支持随机访问、修改、访问、排序的效率比较高,大块的连续内存不容易产生内存碎片缺点:堆内存要求比较高(内存连续),插入、删除元素时不方便、效率低链式表:list 节点的数据项: 数据域:可以是若干个各种类型的数据项 指针域:

2021-10-27 09:49:34 967

原创 数据结构---基本概念

基本概念数据的逻辑结构:集合: 数据元素同属于一个集合,但元素之间没有任何关系。线性结构:数据元素之间存在一对一的关系 (表)线性结构:数据元素之间存在一对一的关系 (表)树型结构:数据元素之间存在一对多的关系 (树)图型结构:数据元素之间存在多对多的关系 (图)数据的存储结构:顺序存储: (利用数据元素的相对位置来表示关系)优点:支持随机访问、访问效率极高、适合查找数据缺点:空间利用率低、对内存要求高、插入、删除不方便链式存储: 数据元素存储在彼此独立的

2021-10-26 09:29:51 103

原创 Linux内核链表(宏)---两种方法实现遍历

#define list_for_each(n,head)\ for(n=head->next; n!=head; n=n->next)ll#define list_for_each_entry(obj,head,mem)\ for(obj=node_to_obj(head->next,typeof(*obj),mem);\ &obj->mem!=head;\ obj=node_to_obj(obj->mem.next,typeof(*obj),mem

2021-10-25 10:13:37 531

原创 Linux内核链表(宏)---计算结构体首地址

#define offset(type,mem) ((long)&((type*)0)->mem)#define node_to_obj(node,type,mem) \ ((type*)((void*)node - offset(type,mem)))

2021-10-24 15:44:49 1465

原创 双向链表 double_list2(封装)

#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#define TYPE inttypedef struct Node{ struct Node* prev; TYPE data; struct Node* next;}Node;Node* create_node(TYPE data){ Node* node = malloc(sizeof(Node)); node->prev

2021-10-24 08:34:38 75

原创 判断一个链表是否为回文结构

给定一个链表,请判断该链表是否为回文结构。struct ListNode { int val; struct ListNode *next;};bool isPail(struct ListNode* head ) { struct ListNode* p1 = head;//快指针 struct ListNode* p2 = head;//慢指针 struct ListNode* n = NULL; if(NULL == head || NULL == hea

2021-10-18 12:45:03 73

原创 顺序队列 array_queue(记录个数)

#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#define TYPE inttypedef struct ArrayQueue{ TYPE* ptr; size_t cal; size_t cnt; size_t front; size_t rear;}ArrayQueue;ArrayQueue* create_array_queue(size_t cal){ ArrayQu

2021-10-12 20:20:46 72

原创 顺序队列 array_queue(空一个位置)

#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#define TYPE inttypedef struct ArrayQueue{ TYPE* ptr; size_t cal; size_t front; size_t rear;}ArrayQueue;ArrayQueue* create_array_queue(size_t cal){ ArrayQueue* queue =

2021-10-12 20:19:29 57

原创 链式栈 list_stack

#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#define TYPE inttypedef struct Node{ TYPE data; struct Node*next;}Node;Node* create_node(TYPE data){ Node* node = malloc(sizeof(Node)); node->data = data; node->n

2021-10-12 20:18:19 66

原创 顺序栈 array_stack

#include<stdio.h>#include<stdbool.h>#include<stdlib.h>#define TYPE inttypedef struct ArrayStack{ TYPE* ptr; size_t cal; size_t top;}ArrayStack;ArrayStack* create_array_stack(size_t cal){ ArrayStack* stack = malloc(sizeof(Ar

2021-10-12 20:17:47 103

原创 判断链表中是否有环

判断给定的链表中是否有环。如果有环则返回true,否则返回false。bool hasCycle(struct ListNode* head ) { if(NULL == head) return false; //p1快指针,p2慢指针 struct ListNode* p1 = head; struct ListNode* p2 = head; for(;;) { if(NULL == p1 || NULL == p1-&

2021-10-12 09:49:41 53

原创 第一个只出现一次的字符

在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)例如:输入:“book”返回值:0输入:aa"返回值:-1输入:“enquire”返回值:1class Solution {public: int FirstNotRepeatingChar(string str) { char arr[256] = {0}; for(int i=0;i<str.length();i++)

2021-10-07 15:16:35 51

原创 螺旋矩阵(C语言解法)

给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。matrixRowLen int matrix数组行数matrixColLen int* matrix数组int* spiralOrder(int** matrix, int matrixRowLen, int* matrixColLen, int* returnSize ) { // write code here int s=0,x=matrixRowLen-1,z=0,y=*matrixColLe

2021-10-04 11:16:43 1260

原创 斐波那契数列

大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。int Fibonacci(int n ) { if(n == 0) return 0; if(n == 1) return 1; if(n == 2) return 1; return Fibonacci(n-1)+Fibonacci(n-2);}...

2021-10-03 13:45:41 42

原创 C语言 知识点整理9 (文件)

文件IOFILE *fopen(const char *path, const char *mode)功能:打开或创建文件path:文件的路径mode:打开模式 r 以只读权限打开文件,如果文件不存在则打开失败 r+ 在r的基础上增加写权限 w 以只写权限打开文件,如果文件不存在则新建,如果文件存在则清空 w+ 在w的基础上增加读权限 a 以只写权限打开文件,如果文件不存在则新建,如果文件存在则不清空

2021-09-02 08:21:27 74

原创 C语言 知识点整理8 (结构、联合、枚举)

结构 (一般结构体变量存放在堆内存中) struct 结构体名 { 类型1 成员名1; 类型2 成员名2; ... };初始化方法:struct 结构体名 变量名 = {v1,v2,v3...}; 注意:必须要根据成员设计的数据初始化struct 结构体名 变量名 = {.成员名1=v1,.成员名3=v3,...}; 只初始化某些成员,可以不用按照顺序初始化 注意:同类型的结构体变量可以..

2021-09-01 14:23:46 97

原创 C语言 知识点整理7 (条件编译)

条件编译:根据条件决定让代码是否参与最终的编译版本控制#if#elif#else#endif头文件卫士:防止头文件重复包含#ifndef 宏名(头文件名全大写, _替代.)#define 宏名(头文件名全大写, _替代.)#endif// 宏名(头文件名全大写, _替代.)判断、调试代码:#ifdef 宏名(DEBUG)#else#endif 注意:可以通过编译参数-D宏名 定义宏封装调试信息宏函数#ifdef DEBUG #defi

2021-09-01 14:08:22 47

原创 C语言 知识点整理6

常见预定义宏#define MAX 50优点:提高可读性、提高可扩展性(方便批量修改)、提高安全性、还可以用在case后面注意:一般宏名全部大写、末尾不要加分号预定义的宏: __func__ 获取函数名 %s __FILE__ 获取文件名 %s __DATE__ 获取当前日期 %s __TIME__ 获取当前时间 %s __LINE__ 获取当前行号 %d宏的二义性的概念和如何避免

2021-09-01 13:39:21 36

原创 C语言 知识点整理5 (字符串,输入输出缓冲区)

字符串的存在形式由字符组成的串型结构,'\0'是它的结束标志字符数组:栈内存 可以修改 要为'\0'预留位置字符串字面值:存储在代码段 只读 修改就会产生段错误 末尾隐藏一个'\0' 地址 const char* str = "hehe"; sizeof("hehe") 结果是5 末尾有'\0' sizeof(str) 结果是4 str是指针 printf("%d\n",sizeof("123123")); 注意:字符个数+1 print

2021-09-01 13:31:28 257

原创 C语言 知识点整理4

函数递归函数自己调用自己的行为叫做递归,可能导致出现死循环的效果堆内存是进程的一个内存段(text\data\bss\heap\stack),由程序员手动管理的。特点是足够大,缺点是使用比较麻烦使用堆内存的原因1、随着程序的复杂数据量变多2、其他的内存段的申请和释放不受控制,堆内存的申请释放是受程序员控制如何使用堆内存注意:C语言没有控制管理堆内存的语句,只能使用标准C库中的函数 #include <stdlib.h> void *ma

2021-09-01 13:06:23 86

原创 C语言 知识点整理3 (指针)

指针定义指针是一种特殊的数据类型,使用它可以定义指针变量,指针变量中存储的是整型数据,代表内存的编号,通过这个编号可以访问对应的内存为什么要使用指针1、函数之间相互独立,但有时候需要共享变量 传参是单向值传递 全局变量容易命名冲突 使用数组还需要传递长度 命名空间是独立的,但是地址空间是同一个,所以指针可以解决这个问题2、由于函数之间传参是值传递(内存拷贝),对于字节数较多的变量,值传递效率较低,如果传递的是变量的地址只需要传递4\8字节,可以提高传参效率

2021-09-01 12:55:35 285

原创 C语言 知识点整理2

进制进制转换:十进制转二进制: 求余,直到商为0为止,过程中产生的余数就是二进制(逆序)二进制转十进制: 2^(n-1) 每位都相加二进制转八进制: 每三位二进制位对应一位八进制二进制转十六进制: 每四位二进制位对应一位十六进制位 超过10用ABCDEF表示在c语言中: 代码中0开头的是八进制数据,0x/0X开头的是十六进制数据 printf %o以八进制显示 %x以十六进制显示 %#o %#x 以对应格式显示不同进制

2021-09-01 12:24:53 76

原创 C语言 常见问题整理

问题1:100年有多少秒(忽略闰平年)?#define SEC (3600*24*365*100u)

2021-09-01 11:47:30 131

原创 C语言 知识点整理1 (基础)

变成可执行程序的过程预处理 把源文件翻译成预处理文件gcc -E code.c 显示预处理结果gcc -E code.c -o code.i 生成以.i结尾的预处理文件编译 把预处理文件翻译成汇编文件gcc -S code.i 生成以.s结尾的汇编文件汇编 把汇编文件翻译成二进制的目标文件gcc -c code.s 生成以.o结尾的目标文件链接 把若干个目标文件合并成一个可执行文件gcc a.o b.o c.o... 默认生成一个a.out的.

2021-09-01 11:44:29 52

原创 C语言 字符串相关函数重写(strlen\strcpy\strcat\strcmp)

运用strlen\strcpy\strcat\strcmp时需添加#include<string.h>头文件size_tstrlen(constchar*s);功能:计算字符串长度,不包括'\0'char*strcpy(char*dest,constchar*src);功能:把src拷贝到destchar*strcat(char*dest,constchar*s...

2021-09-01 09:55:18 647

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除