![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
c
c语言笔记
゛派大星ヾ
这个作者很懒,什么都没留下…
展开
-
c语言整形提升和算术转换
整形提升和算术转换隐式类型转换(整形提升)算术转换赋值运算符类型转换正常表达式类型转换函数调用类型转换强制类型转换总结隐式类型转换(整形提升)char类型和short类型的变量在表达式中运算时会发生整形提升变成int类型。整形提升的方式:1.无符号数高位补0。2.有符号数高位补符号位。即:正数高位补0,负数高位补1。 char a; char b = 10; char c = 20; a = b + c; // 表达式中b和c先转换成int类型,再进行运算 //最后将运算结果截断原创 2021-02-10 16:43:34 · 206 阅读 · 0 评论 -
快速排序递归实现
快排思路绝大多数树的排序算法,都可以先理解每趟排序然后再理解多趟排序,快速排序也不例外。下面我将介绍快速排序中单趟排序的三个方法及思路,分别是 左右指针法,挖坑法,前后指针法。1.左右指针法快速排序的每一趟都是为了找出值为key的元素的正确位置。而key是一个随机的元素值。left是从左往右走找比key大的,right是从右往左走找比key小的。然后交换两个元素的值。多次寻找后,最终left和right相遇将相遇位置的元素和key的交换,这样就找到key的正确位置,key的坐左边元素都小原创 2021-01-31 17:05:44 · 1274 阅读 · 0 评论 -
归并排序的递归和非递归实现,思想分析,时间复杂度分析
思路分析递归版代码实现及分析非递归版代码实现及分析原创 2021-01-27 18:30:46 · 866 阅读 · 0 评论 -
直接插入排序、插入排序
思路分析代码分析时间复杂度分析1.思路分析2.代码分析//直接插入排序void InsertSort(int *a, int n){ //将下标为i的元素插入到已经拍好序的序列中 for (int i = 1; i < n;i++) { //end记录已经排好序的并且未与temp比较元素的下标,初始值为 0 int end = i - 1; //temp记录本趟排序要插入的元素的值为a[end+1],此时end+1位置空余出来 int temp = a[en.原创 2021-01-25 10:20:11 · 140 阅读 · 0 评论 -
二叉树的构建、前、中、后序遍历、结点个数、叶子结点个数、第K层结点个数、
二叉树本篇博客主要是带来二叉树的相关操作的实现,内容很详细。二叉树建立求结点个数求叶子结点个数求第K层结点个数查找值为X的结点前、中、后序遍历1. 二叉树的建立// 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树BTNode* BinaryTreeCreate(BTDataType* a, int* pi)//这里的a是树的所有结点元素的数组,pi是a的下标的地址//这里是解释[为何下标要传指针](https://blog.csdn.net/weixin_50原创 2021-01-21 17:41:15 · 224 阅读 · 0 评论 -
剖析二叉树使用数组创建传下标的地址
这里我使用反证法那如果在传值的时候我们传的是下标的地址,那我们每次改变下标的时候改变的就是同一个下标了原创 2021-01-21 17:35:09 · 114 阅读 · 0 评论 -
剖析memcpy和memmove区别
对于相同不同内存块memcpy和memmove都能实现内存拷贝,对于相同内存块memmove仍然可以实现内存拷贝,但是memcpy可能就实现不了了。主要原因就是memcpy只是进行从头到尾的拷贝而memmove可根据不同情况可能是从头到尾的拷贝也可能是从尾到头的拷贝不同内存块内存重叠(相同内存块)可以看到这样的重叠方式中字符串src = “ello”,dst = “hello”拷贝后dst = “ello”,也可以正常拷贝。如果是这样的重叠方式,memcpy因为是从头到尾的拷贝拷贝的过程也会原创 2021-01-11 19:22:22 · 186 阅读 · 0 评论 -
力扣225-用队列实现栈(C语言版)
要用队列实现栈,那我们首先应该明白的是实现栈的目的就是实现它的几个操作:压栈、弹栈、取栈顶元素、判空、求元素个数。那我们现在将每个操作细化来看应该如何实现。1、压栈:将元素尾插到栈中,队列的入队操也是将元素尾插队中。用队列的入队操作是可以实现的压栈的。2、取栈顶元素:取栈顶元素实际上就是取队尾的元素。可以用队列直接实现。3、判空:队列空了栈也就是空的。可以用队列直接实现。4、求元素个数:求队列中的元素个数即是栈的元素个数。可以用队列直接实现。5、弹栈:将栈顶元素删除就是删除队尾的元素。队列是先进.原创 2021-01-06 14:14:59 · 278 阅读 · 0 评论 -
力扣147-链表的插入排序
思路:1.创建一个新的链表2.对原链表进行头删3.在新链表找插入的合适位置(保证插入后链表有序)4.将头删的结点插入到新链表的合适位置处(头插操作和中间插尾插不相同)/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */typedef struct ListNode Node;struct ListNode* .原创 2020-12-31 15:59:46 · 147 阅读 · 0 评论 -
力扣142-返回链表的入环结点
这里我使用的是快慢指针思路:1.通过快慢指针判断该链表是否有环,若无环返回NULL如何判断链表是否有环可以看这篇博客快慢指针判断链表是否有环2.若有环,找到相遇位置3.让快指针从头开始向后走,慢指针从当前位置开始向后走,再次相遇时,相遇节点即是入环结点。下面给出代码/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; .原创 2020-12-28 11:30:50 · 89 阅读 · 0 评论 -
力扣141-给定一个链表,判断链表中是否有环。
我先给出代码/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */typedef struct ListNode Node;bool hasCycle(struct ListNode *head) { //快慢指针 Node *fast = head,*slow = head; while(fas.原创 2020-12-26 15:59:12 · 135 阅读 · 2 评论 -
出现一次的数字(找单身狗)
这里我们首先了解二进制数位异或的一些性质1.相同数字异或为0.(0 ^ 0 = 0, 1 ^ 1 = 0)2.相反数字异或为1.(1 ^ 0 = 1)3.和 0 异或结果不变( 1 ^ 0 = 1 , 0 ^ 0 = 0)4.和 1 异或结果相反( 1 ^ 1 = 0, 0 ^ 1 = 1)不妨将其推广到十进制数当中:1.相同的十进制数异或结果为 0例如:5 ^ 5 = 02.两个大小不同的数字异或之后结果一定不是0例如: 3 ^ 5 = 63....原创 2020-12-10 17:00:21 · 5241 阅读 · 0 评论 -
c语言常见字符串,strtok 函数的使用
c语言常见字符串函数使用及实现一、c的常见字符串函数:头文件 #include<string.h>1. 求串长:strlen(str) 求str长度(注意不包含‘\0’)2. 串比较:strcmp(str1,str2)两串相同返回0,相反返回1。3. 串复制:strcpy(str1, str2)将str2的内容复制给串1(包含’\0’)4. 串连接:strcat(str1, str2)将str2接到str1后面5. 找串中的字符:strstr( str, ch) ch是char类型原创 2020-11-19 17:26:10 · 435 阅读 · 1 评论