![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言
Mysterious superstar
没有什么是不劳而获的
君子藏器于身,待时而动。不鸣则已,鸣则冲天
展开
-
用C语言模拟楼道灯开关控制程序,两个开关都能控制灯的亮灭
相信大家家里都有双开关控制的楼道灯,今天笔者就用C语言模拟实现一下这个过程。要求是开关A和B都能控制灯的亮灭,用1表示开关有动作,0表示开关无动作#include<stdio.h>#include<stdlib.h>#include<windows.h>//#include<time.h>//#define _CRT_SECURE_NO_...原创 2019-04-24 23:29:40 · 6016 阅读 · 0 评论 -
链表的头删,头插,尾插,尾删,反转链表详解图示
链表的基本操作,头删,头插,尾插,尾删,反转详解图示。原创 2019-07-28 17:55:10 · 213 阅读 · 0 评论 -
【数据结构】【二叉树】二叉树的前序中序和后序遍历技巧,已知二叉树前序和中序还原二叉树、已知二叉树后序和中序还原二叉树、已知二叉树前序和后序还原二叉树
前序遍历:先遍历二叉树的根再遍历它的左孩子再是右孩子。中序遍历:先遍历二叉树的左孩子再遍历根再遍历右孩子。后序遍历:先遍历二叉树的左孩子再遍历右孩子再遍历根。从种遍历方式上可以分析出的规律有a、前序遍历的根一定是第一个。b、后序遍历的根一定是最后一个。c、已知根根据中序遍历可以得到它的左右子树。先看已知前序后中序遍历还原二叉树:可以看到,通过前序遍历确定根...原创 2019-08-18 17:40:13 · 1509 阅读 · 0 评论 -
什么叫做未定义行为
一、未定义行为C语言中的未定义行为(Undefined Behavior)是指C语言标准未做规定的行为。 同时,标准也从没要求编译器判断未定义行为,所以这些行为有编译器自行处理,在不同的编译器可能会产生不同的结果,又或者如果程序调用未定义的行为,可能会成功编译,甚至一开始运行时没有错误,只会在另一个系统上,甚至是在另一个日期运行失败。当一个未定义行为的实例发生时,正如语言标...原创 2019-08-24 09:51:37 · 2886 阅读 · 0 评论 -
【数据结构】【c进阶】二叉树的非递归形式前序遍历、非递归形式中序遍历、非递归形式后序遍历详解
原创 2019-08-20 17:21:37 · 172 阅读 · 0 评论 -
【C】循环双向链表的基本操作,头插、头删、尾插、尾删
//double slist.h#pragma once#include<stdio.h>#include<stdlib.h>#include<string.h>typedef int LTDataType;typedef struct ListNode{ LTDataType _data; struct ListNode* _next; ...原创 2019-08-15 17:17:59 · 835 阅读 · 0 评论 -
快速排序之深度理解双指针法和挖坑法
总的来说归并排序和快速排序理解起来是比较难的,比较烧脑,学习过程中很容易产生畏难情绪。在我看来我们不需要一下子就深切的知道它的一切算法细节,这样对于初学者难度是比较大的。就像我们刚学高数当中的拉普拉斯变换和性质一样,初级阶段只需要会用就行。所以我们现阶段不要求说要将快速排序为什么要这样排了解得很清楚,我们只需要知道是这样排的,是这样实现的。一、双指针版快速排序 从小到大...原创 2019-08-24 21:53:53 · 958 阅读 · 0 评论 -
a=b++,c++和a=(b++,c++)的区别
a=b++,c++相当于a=b++;c++;a=(b++,c++)相当于a=c++;加括号才是逗号表达式原创 2019-08-25 16:56:27 · 10304 阅读 · 0 评论 -
++(a++)编译会出错 (++i>0)|| (++j>0)的短路求值、 char str[] ;fun(str); fun(char str_arg[2])能够正确调用它吗
左值可以出现在表达式左边的值(等号左边),可以被修改,它是存储数据值的那块内存的地址,也称为变量的地址右值存储在某内存地址中的数据,也称为变量的数据!左值可以作为右值,但右值不可以是左值本题不合法a++不能当做左值使用,++a可以当做左值使用。++a表示取a的地址,对他的内容进行加1操作,然后把值放回寄存器中,a++表示取a的地址,把它的值装入寄存器,然后再对内存中的a执行加1操作...原创 2019-08-25 17:08:26 · 254 阅读 · 0 评论 -
【数据结构】【堆】【c】详解堆的自顶向下算法、和堆的建立。
最近笔者花了几天时间研究了堆,下面做一些分享。首先什么是堆。堆在逻辑上是特殊的完全二叉树,在存储结构上是顺序表。一般用数组实现。堆只分为大堆和小堆所谓大堆是指:在堆中所有的最小二叉树的父亲节点必须比它的叶子节点大。所谓小堆是指:在堆中所有的最小二叉树中父亲节点比它的叶子小。只有这两种特殊的情况下一个数组才能被称为堆。堆的自顶向下算法:现在我们给出一个数组,逻辑上看...原创 2019-08-17 17:41:12 · 2673 阅读 · 0 评论 -
【数据结构】【c】【堆】堆排序算法详解(复杂度、前提、自顶向下算法、应用场景)
堆作为一种特殊的数据结构,它的排序也非常有意思。和冒泡排序、选择排序一样,他们都能求出顺序表的第n大的数据。在这里特殊强调,在堆排序之前先要建立一个堆。(建堆的过程就能保证是大顶堆或者小顶堆,根最大或者最小)堆排序最重要的基础还是自顶向下算法。我们来看它的实现过程。可以看到它的实现方式交换堆顶的元素和最后一个元素,此时最后一个位置作为有序区,然后进行其他无序区的堆调整,重...原创 2019-08-18 09:45:49 · 461 阅读 · 0 评论 -
【c】深入详解++i和i++的区别与联系
一直知道前加和后加的区别是 ++num;num+=1;return num num++;int tmp=num;num+=1;return tmp; 但是就是不知道在什么情况下会生效,因为有的地方他两的运行结果看起来没有任何差别。下面笔者就实际举例来说明他们的区别。一、他们作为一个单独的运算出现在代码中,没有任何的赋值操作int num = 0; num++; p...原创 2019-08-01 10:25:41 · 396 阅读 · 0 评论 -
用递归的方式实现strlen()函数和递归的执行过程详解
#include <stdio.h>#include "stdlib.h"int count = 0;void reverse_string(char* string){ //int count = 0; if ('\0' != *(++string)) reverse_string(string); //printf("%c", *(string - 1))...原创 2019-05-07 21:51:28 · 570 阅读 · 0 评论 -
返回值value的二进制位模式从左到右翻转后的值
//这个函数的返回值value的二进制位模式从左到右翻转后的值。////如://在32位机器上25这个值包含下列各位://00000000000000000000000000011001//翻转后:(2550136832)//10011000000000000000000000000000//程序结果返回://2550136832#include <stdio.h>...原创 2019-04-21 23:35:31 · 177 阅读 · 0 评论 -
调整数组使奇数全部都位于偶数前面,在杨氏矩阵里面查找一个数
#include<stdio.h>#include<stdlib.h>//调整数组使奇数全部都位于偶数前面int main(){ int arr1[10] = { 0 }; int arr[10] = { 1,2,3,4,5,6,7,8,9,0 }; int left = 0, right = 9; for (int i = 0; i < 10; ++...原创 2019-04-20 23:07:48 · 161 阅读 · 0 评论 -
用递归和非递归求斐波那契数列
递归的方法#include<stdio.h>#include<stdlib.h>递归的方式计算斐波那契数int FeiBo(int f){ int n = 0; if (0 == f) printf("0的斐波那契数是0\n"); else if (1 == f || 2 == f) n = 1; else n = FeiBo(f - 2) + F...原创 2019-04-14 21:59:01 · 4704 阅读 · 0 评论 -
用递归的方式计算n的阶乘
//递归方法计算一个数的阶乘#include<stdio.h>#include<stdlib.h>int jiecheng(int f){ int n = 0; if (f < 0) printf("您的输入非法"); else if (0 == f || 1 == f) n = 1; else { n = jiecheng(f - 1...原创 2019-04-27 23:32:45 · 13681 阅读 · 2 评论 -
递归方式计算一个数的几次方
**今天我们来看一个计算一个数的几次方的问题,话不多说,代码呈上**#include <stdio.h>#include <stdlib.h>//计算一个数的次方int Factor(int n, int k){ if (k == 1) { return n; } else if (k == 0) { return 1; } else...原创 2019-04-27 23:46:27 · 2451 阅读 · 0 评论 -
用递归的方式逆置字符串
**今天我们来看一下用递归的方式逆置字符串**//当条件不成立时,跳出if,输出\0前面的字母,再跳出这个递归,输出倒数第二个,直到递归结束。//用递归逆置字符串#include <stdio.h>#include "stdlib.h"void reverse_string(char* string){ if ('\0' != *(++string)) rever...原创 2019-04-28 00:03:53 · 474 阅读 · 0 评论 -
结构体的定义和初始化方式
1.结构体的定义和初始化方式1typedef struct Student { char name[20]; long long id; int math; }student; //typedef struct Student student; student s ={ "lixuhui", 17040413109, 100 };方式2struct S...原创 2019-05-02 23:57:12 · 3227 阅读 · 2 评论 -
用递归的方式计算一个数的阶乘
话不多少,代码呈上。//计算一个数的阶乘#include<stdio.h>#include<stdlib.h>int JieCheng(int f){ int n = 0; if (f < 0) printf("您的输入非法"); else if (0 == f || 1 == f) n = 1; else { n = JieCh...原创 2019-05-09 12:38:15 · 1333 阅读 · 0 评论 -
判断一个数是不是素数
#include<stdio.h>#include<stdlib.h>int panduan(int a){ int i = 0; for (i = 2; i <= a - 1; ++i) { if (0 == a % i) return 0; else return 1; }}int main(){ int a = 0; ...原创 2019-04-03 12:51:13 · 499 阅读 · 1 评论 -
冒泡排序和选择排序浅析和算法比较
对数组进行排序是c语言中比较常见的事情了,接下来笔者就带着大家聊聊排序那些事。话不多说,代码呈上冒泡排序:#include<stdio.h>#include<stdlib.h>#define MAX 3//冒泡排序int main(){ int a[MAX] = { 9,6,14 }; int i = 0; int t = 0; int j ...原创 2019-05-07 21:09:30 · 523 阅读 · 0 评论 -
快速排序之hoare法
hoare法首先我们来看它的基本思路: 第一步:选择待排序数组中的三个值,分别是首尾还有中值,start,end 和mid 第二步:对三个数进行排序,从小到大, 第三步:保护基准值,swap(src + mid, src + end - 1);也就是基准值和倒数第...原创 2019-08-27 14:00:36 · 788 阅读 · 0 评论