
C_Study
文章平均质量分 75
xiao zhou
这个作者很懒,什么都没留下…
展开
-
二叉树常见操作及练习题
二叉树常见操作及OJ练习二叉树常见操作首先先将树的结构体介绍一下typedef struct BTNode //树的结点的结构体{ BTDataType x; //存该结点的值 //BTDdataType是指存储的数据类型 struct BTNode* leftchild; //储存左孩子的地址 struct BTNode* rightchild; //储存右孩子的地址}BTNode;深度优先遍历(前、中、后序)(1)前序遍历:对于每一个结点,先访问该结点本身,再去访问它的原创 2021-05-28 21:48:51 · 1328 阅读 · 13 评论 -
堆(Heap)的基本知识和堆排序
堆二叉树二叉树的概念满二叉树完全二叉树堆堆的分类如何建堆(将数据变成堆的存储方式)堆排序算法堆是利用完全二叉树的结构来维护一组数据,然后进行相关操作,一般的操作进行一次的时间复杂度在O(1)~O(logn)之间。我们在了解学习堆这个数据结构之前,必须先学习一些二叉树的概念和性质。二叉树二叉树的概念一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。简单来说,二叉树就是每个节点的度(树的度)小于等于2的数满二叉树一个二叉树,如果每一个层的原创 2021-04-23 20:37:53 · 1930 阅读 · 5 评论 -
单链表带环问题归纳总结
单链表的带环问题判断单链表中是否存在环1.问题分析2.代码实现若带环,求环的长度1.问题分析2.代码实现若带环,求环的连接点问题分析2.代码实现判断单链表中是否存在环1.问题分析(1)不带环的链表的最后一个结点的next指针是指向NULL,而带环链表没有类似的最后节点,所以无法判断带环链表的结束,也就无法通过遍历一遍链表来求取链表的长度。但是如果有一个指针在遍历时它最后会一直在环中重复打圈。因此我们可以使用快慢指针来判断(fast / slow)。如果链表带环那么当fast走到空指针时slow还未走到原创 2021-04-20 20:36:36 · 479 阅读 · 6 评论 -
LeetCode-旋转数组
旋转数组问题题目描述给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。方法一:分析:一个数组【1,2,3,4,5,6,7】如果旋转3次,得到的数组就是【5,6,7,1,2,3,4】。方法一是最好想的方法。我们一次一次旋转数组,每次都把数组中最后一个元素放到第一个位置,把剩余的元素都向后挪动一个位置。重复k次操作,就得到了结果。代码实现void change(int* arr, int size) //每次旋转一次{ int tmp = arr[size - 1原创 2021-04-09 19:22:06 · 981 阅读 · 5 评论 -
KMP算法详解
从头到尾彻底理解KMP 此文转自神的博客 http://blog.youkuaiyun.com/v_july_v/article/details/7041827# 1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱。所以...转载 2021-03-31 16:48:51 · 470 阅读 · 0 评论 -
文件操作详解
文件操作详解什么是文件二级目录三级目录文件的打开与关闭文件信息区文件的打开文件的关闭文件的读写fputcfgetcfputsfgetsfprintffscanfsprintfssacnffwritefread文件结束的判定什么是文件我们所说的文件一般包括三类:1.程序文件:包括源文件(.c)目标文件(windows-.obj)可执行程序(windows-.exe)2.数据文件:程序运行时读写的数据每个文件都有自己的文件名,文件名是文件的唯一标识。组成:文件路径+文件名主干+文件后缀 eg:原创 2021-03-27 20:58:29 · 1435 阅读 · 1 评论 -
动态内存开辟详解
动态内存管理malloc函数代码示例calloc代码实现reallocmalloc函数函数原型 :void* malloc ( size_t size )1.如果开辟成功,则返回一个指向开辟好空间的指针。2.如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。3.返回值的类型是 void ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。4.如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。注:1.malloc原创 2021-03-24 19:44:14 · 1594 阅读 · 6 评论 -
结构体总结
结构体1.概念:结构体可以称之为一些值的集合,这些值我们称之为“成员变量”。每个成员变量可以有不同的类型,我们将这些成员变量“打包”形成一个结构体,用于描述一个具有多个特性的复杂对象。2.结构体的声明:struct tag //结构体名称{ member_list; //成员变量列表}variable_list; //变量名列表有时候,我们甚至可以将tag省略,只不过如此操作我们只能在声明这个结构体的时候进行一次变量创建,无法再在之后的情况下创建变量,并且无法原创 2021-03-13 20:26:15 · 750 阅读 · 5 评论 -
逆置字符串问题
逆置字符串问题内容完全改变问题以空格为分割单词顺序不变问题内容完全改变问题这类问题算是比较简单的了,而我们的思路是从字符串两头开始,交换内容。在这里我介绍两种方法。1.循环的方式2.递归的方式(1)循环的方式很好理解,就是暴力地进行内容的交换,而交换的规则就是从begin和end两头进行内容交换hehehee.g. 字符串 " l am a student." 我们可以定义一个指向字符串起始位置的指针char * begin和指向字符串最后一个字符的指针char * end,不断让两个交换原创 2021-03-09 15:47:38 · 287 阅读 · 0 评论 -
字符串函数与内存操作函数总结与模拟实现
字符串函数1.strlen 函数(1)作用:用于求字符串长度,在遍历字符串时遇到 ‘\0’ 停止(2)函数原型:size_t strlen ( const char* str)注意事项:strlen的返回值是无符号整型,所以不能轻易比较大小模拟实现:计数器、递归、指针相减三种方法 计数器方法int my_strlen(char* str){ assert(str); //断言,避免str是空指原创 2021-03-04 19:55:58 · 192 阅读 · 2 评论 -
三子棋游戏的实现
游戏组成部分:main()主函数int main(){ srand((unsigned) time(NULL)); int input = 0; do { menu(); printf("请输入:>"); scanf("%d", &input); switch (input) { case 0: break; case 1: game(); break; default: printf("输入错误,请重新输入\n"); break; } }原创 2021-01-24 19:46:50 · 146 阅读 · 0 评论 -
用实战带你“玩转”函数递归
函数递归知识总结1.函数递归:直接或者间接调用自己的方式注:(1)函数递归的思想就是将大的问题转化为一步一步小的问题,从而实现算法和代码的简化,方便自己理解过程、实现代码。这不仅仅是一个函数相关的知识点,更是一个重要的结局问题的思维方式,无论是分治法还是递归法都是“简化”方法,都是我们思考问题的重要维度(2)在进行函数递归的时候必须有一个限制条件/界限,并且在递归的深度不断增大的时候,条件应该逐渐逼近限制条件。这是函数递归过程中尤为重要的一点,因为递归我们可以理解成为一种特殊的“循环”,我们为了解决原创 2021-01-22 20:22:02 · 345 阅读 · 0 评论 -
递归法将十进制数字转换为其他进制数字
标题如何将十进制转换为其他进制数字1.导入2.分析3.代码实现 **导入**一.十进制转换为二进制数字为例子十进制二进制1121031%1101010二.以十进制位获得每一位数字为例子1 -----> 1%10=111 -----> 11%10=1 + (11/10 )%10=1123-----> 123%10=3 + ( 123/10原创 2021-01-18 18:12:23 · 1770 阅读 · 0 评论 -
启航
启程#第一次写博客一. 从一开始接触编程到现在的感受一开始对编程是既好奇又恐惧,期待着自己能够成为“网络高手”,但是又害怕自己没法学好,在选大学专业的时候也是比较犹豫,担心会不会学不出成绩,会不会在大学学习中掉队,会不会找不到一个好工作。毕竟之前没有太多接触电脑,编程对于自己来说更是远不可及的“高科技”,自己从来没有想过能够学习这个专业。可是当我踏入电子科技大学的大门,第一次打出“hello world”的程序,一切疑惑,顾虑都抛之脑后,我逐渐坚定自己的自信,学习编程也是学习一门学科,学习一门技能,原创 2021-01-10 22:39:08 · 287 阅读 · 3 评论