学习大纲

  • 背景介绍
  • 第一个C语言的程序
  • 数据类型
  • 变量和常量
  • 变量的作用域和生命周期
  • 常量
  • 字符串+转义字符+注释
  • 选择语句
  • 循坏
  • 函数
  • 数组
  • 操作符
  • 常见关键字
  • #define 定义常量和宏
  • 指针
  • 结构体
  • 完结

背景介绍


  • 简单介绍一个计算机的结构
    计算机主要由应用软件,操作系统,驱动层和硬件来组成
    其中的应用软件主要包括一些日常使用的软件,例如:QQ音乐,QQ等一些软件
    操作系统包括windows,macos,linux等一些计算机操作系统
    驱动车则是帮助操作系统和硬件之间进行一个交互,帮助计算机更好的工作
    硬件就是电脑本身的一些设备和配置
#mermaid-svg-pMKowjA5zrmZPRez {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-pMKowjA5zrmZPRez .error-icon{fill:#552222;}#mermaid-svg-pMKowjA5zrmZPRez .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-pMKowjA5zrmZPRez .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-pMKowjA5zrmZPRez .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-pMKowjA5zrmZPRez .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-pMKowjA5zrmZPRez .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-pMKowjA5zrmZPRez .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-pMKowjA5zrmZPRez .marker{fill:#333333;stroke:#333333;}#mermaid-svg-pMKowjA5zrmZPRez .marker.cross{stroke:#333333;}#mermaid-svg-pMKowjA5zrmZPRez svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-pMKowjA5zrmZPRez .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-pMKowjA5zrmZPRez .cluster-label text{fill:#333;}#mermaid-svg-pMKowjA5zrmZPRez .cluster-label span{color:#333;}#mermaid-svg-pMKowjA5zrmZPRez .label text,#mermaid-svg-pMKowjA5zrmZPRez span{fill:#333;color:#333;}#mermaid-svg-pMKowjA5zrmZPRez .node rect,#mermaid-svg-pMKowjA5zrmZPRez .node circle,#mermaid-svg-pMKowjA5zrmZPRez .node ellipse,#mermaid-svg-pMKowjA5zrmZPRez .node polygon,#mermaid-svg-pMKowjA5zrmZPRez .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-pMKowjA5zrmZPRez .node .label{text-align:center;}#mermaid-svg-pMKowjA5zrmZPRez .node.clickable{cursor:pointer;}#mermaid-svg-pMKowjA5zrmZPRez .arrowheadPath{fill:#333333;}#mermaid-svg-pMKowjA5zrmZPRez .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-pMKowjA5zrmZPRez .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-pMKowjA5zrmZPRez .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-pMKowjA5zrmZPRez .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-pMKowjA5zrmZPRez .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-pMKowjA5zrmZPRez .cluster text{fill:#333;}#mermaid-svg-pMKowjA5zrmZPRez .cluster span{color:#333;}#mermaid-svg-pMKowjA5zrmZPRez div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-pMKowjA5zrmZPRez :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

应用软件
操作系统
驱动层
硬件

  • 计算机语言的发展
    计算机首先从2进制,例如001010101,在此基础上有些提出了助记符这样的定义,助记符就是指将二进制转换成更容易记住的名字,例如1001—ADD,0010—MOV等,这时的二进制便发展成了汇编语言。从此之后,计算机语言便有了新一轮的发展,从汇编语言到了B语言又到如今的C语言
#mermaid-svg-f9o702DlvxURGuG9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-f9o702DlvxURGuG9 .error-icon{fill:#552222;}#mermaid-svg-f9o702DlvxURGuG9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-f9o702DlvxURGuG9 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-f9o702DlvxURGuG9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-f9o702DlvxURGuG9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-f9o702DlvxURGuG9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-f9o702DlvxURGuG9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-f9o702DlvxURGuG9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-f9o702DlvxURGuG9 .marker.cross{stroke:#333333;}#mermaid-svg-f9o702DlvxURGuG9 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-f9o702DlvxURGuG9 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-f9o702DlvxURGuG9 .cluster-label text{fill:#333;}#mermaid-svg-f9o702DlvxURGuG9 .cluster-label span{color:#333;}#mermaid-svg-f9o702DlvxURGuG9 .label text,#mermaid-svg-f9o702DlvxURGuG9 span{fill:#333;color:#333;}#mermaid-svg-f9o702DlvxURGuG9 .node rect,#mermaid-svg-f9o702DlvxURGuG9 .node circle,#mermaid-svg-f9o702DlvxURGuG9 .node ellipse,#mermaid-svg-f9o702DlvxURGuG9 .node polygon,#mermaid-svg-f9o702DlvxURGuG9 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-f9o702DlvxURGuG9 .node .label{text-align:center;}#mermaid-svg-f9o702DlvxURGuG9 .node.clickable{cursor:pointer;}#mermaid-svg-f9o702DlvxURGuG9 .arrowheadPath{fill:#333333;}#mermaid-svg-f9o702DlvxURGuG9 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-f9o702DlvxURGuG9 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-f9o702DlvxURGuG9 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-f9o702DlvxURGuG9 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-f9o702DlvxURGuG9 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-f9o702DlvxURGuG9 .cluster text{fill:#333;}#mermaid-svg-f9o702DlvxURGuG9 .cluster span{color:#333;}#mermaid-svg-f9o702DlvxURGuG9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-f9o702DlvxURGuG9 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

2进制
汇编语言
B语言
C语言

第一个C语言的程序

  • 这里需要说明的是,本文中使用的编译器为VS2019
#define  _CRT_SECURE_NO_WARNINGS //这里是因为VS中scanf不安全,所以定义一个常量给它,在VS中要使用scanf_s才行,但是其他编译器不通用
#include<stdio.h>//引用头文件,使其可以使用printf库函数
int main()//主函数,第一个C语言程序只可以有一个main函数
{printf("hehe\n");//在屏幕上输出一个hehereturn 0;//返回值,返回int类型的值,这里为0
  • 上面是一个简单的C语言程序,一个最简单的C语言的程序要包含头文件和主函数(main),不然这个程序是不完整的。

数据类型

  • C语言中有一些常见的数据类型
数据类型 大小(字节)
char 1
short 2
int 4
long 4
long long 8
float 4
double 8

  • 这些数据类型的大小是怎么计算而来的呢,这里我们可以使用C语言的一个函数size of 来实现
int main()
{printf("%d\n", sizeof(char));//%d表示返回一个整形,sizeof是计算类型占据的空间,以字节来返回的printf("%d\n", sizeof(short));printf("%d\n", sizeof(int));printf("%d\n", sizeof(long));printf("%d\n", sizeof(long long));printf("%d\n", sizeof(float));printf("%d\n", sizeof(double));return 0;
}

  • 这里我们要提出的是在一个C语言进行的过程中,总是从main函数的第一行进行下去的,这里是十分重要的!

  • 这里给读者补充一个内容,就是计算机内存单位的计算
单位 单位换算
1bit 1
1byte 8 bit
1KB 8 byte
1MB 1024 KB
1GB 1024 MB
1TB 1024 GB
1PB 1024 TB

  • 注意:bit是计算机内存大小的最小单位
  • 一个汉字是两个字节,要用字符串去存储

变量和常量

  • 定义变量的方法采用 类型+变量=值 的方法来实现
int main()
{int a = 2; //定义一个变量整形a,给它赋值2char b = 'w';//定义一个变量字符,给它赋值’w'
}


int main()
{float a = 34.3;//定义一个单精度的浮点变量a,值为34.3return 0;}
  • 这里要注意虽然给的类型是float,但是在编译器中默认一个小数是double
  • 若要为float变量则在值后面加一个f

  • 局部变量和全局变量
  • 局部变量是指在main函数内部定义的变量
  • 全局变量是指在main函数外部定义的变量

  • 这里给大家看一下容易出错的例子
int num = 10;//10
int main()
{int    num = 20;printf("%d\n", num);//20return 0;
}
  • 这里的输出结果应该是多少呢?
  • 答案是20,因为局部变量优先级在main函数中

  • 变量的定义
  • 只能由字母(小写大写都可以),数字和下划线( _)组成
  • 不能以数字开头
  • 长度不可以超过63个字符
  • 变量名中区分大小写的
  • 变量名不可以用关键字
  • 变量名最好有意义
int main()
{int Apple;int apple;//这两个变量不一样int apple1_1;int 1apple;//不可以用数字开头int char;//不可以使用关键字int banananum;//变量名最好有意义,这里的变量表示香蕉的数量
}

变量的作用域和生命周期

  • 局部变量的作用域:是局部变量所在的局部范围
  • 全局变量的作用域:全局变量的作用域是整个工程

  • 如果另一个变量在其他的源文件中,是否可以使用?
  • 答案是可以


  • 生命周期
  1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束
  2. 全局变量的生命周期:整个程序的生命周期

常量

  • 字面常量

  • const修饰的常变量

  • #define定义的标识符常量

  • 枚举常量

  • 枚举变量的注意事项

  • 注意常量是不可以去修改的

  • 这里再给大家补充一个C99的概念——变长数组

  • 什么是变长数组呢?

  • 首先我们先看一个错误

  • 如果我们给变量a常量化会怎么样呢?(const修饰)

  • 我们发现虽然给a常量化,但是还是行不通,这是因为在VS的编译环境下const只是给这个变量一个常属性,不能改变它本身是变量的性质

  • 但是如果在Linux系统的gcc编译数组中,这样的形式就可以成立,这样的数组就叫做变长数组,但是这样的数组不可以初始化


字符串+转义字符+注释

  • C语言中的字符是使用单引号来引起来的' '
  • char a =' w ',char b = 'b'等一些字符
  • 但是在C语言中字符串和字符的定义是不一样的
  • 字符串要用 " "双引号来引出,而且要用一个字符数组来包括它
  • char arr[ ]="apple"
#include<stdio.h>
int main()
{char arr[] = "apple";//定义一个字符数组来包含apple这个字符串
}

  • 注意:字符串的结束标志是一个\0的转义字符。在计算字符串长度的时候\0是结束的标志,不算作字符串的内容
int main()
{char arr1[] = "bit";//默认有'\0'char arr2[] = { 'b','i','t' };char arr3[] = { 'b','i','t','\0'};//有'\0'的字符串printf("%s\n", arr1);//%s表示打印字符串,识别'\0'作为结束标志printf("%s\n", arr2);printf("%s\n", arr3);}

  • arr2[ ]找不到结束的标志,所以它只能在它之后存储的空间中找到'\0'才能停止,所以会产生乱码
  • 当然这里也可以使用另个方法来验证
#include<string.h>
int main()
{char arr1[] = "abc";char arr2[] = {'a', 'b', 'c'};int len = strlen(arr1);printf("%d\n", len);len = strlen(arr2);printf("%d\n", len);//strlen 是一个库函数,专门用来求字符串长度的,它也是找到\0结束int len1 = strlen("abcdef");printf("%d\n", len1);return 0;
}

  • 转义字符
  • 转义字符是编程语言中很常见的存在,我们来看一看一些例子
转义字符 释义
\? 在书写多个问号的时候,防止他们被解析成三字母词
\` 用于表示一个字符单引号
\" 用于表示一个字符串内部的双引号
\ \ 用于表示一个反斜杆
\a 用于表示警告字符,蜂鸣
\b 退格符
\f 进纸符(换一页)
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ddd ddd表示1~3个八进制数字。如 :\130 X。(不一定要写满)
\xdd dd表示1~2个十六进制的数字。如:\30 0。(不一定要写满)
  • 这里的数字会转化成十进制对应的ASCII码值
  • 注释
  • C语言中的注释有两种形式可以呈现
    1. 使用/* */这样的形式来呈现(不可以嵌套实现)
    2. 使用//这样的形式来呈现(可以一行也可以多行)


选择语句

  • 在C语言中选择语句是十分重要的,它运用在许许多多的方面——if else这样的形式来呈现
int main()
{            //c语言中0为假,非0为真int a = 1;if (a)   //当()里面的值为真时,执行下面的语句printf("好好学习");else     //当()里面的值为假时,执行下面的语句printf("去卖红薯");return 0;
}

  • 其余的选择语句后面会有详细讲解

循坏

  • C语言中的循环有很多种,for,while,switch这类都是一种循环体。
  • 这里我们粗略讲解,后面会细讲
int main()
{int a;scanf("%d", &a);while (a < 10)//当a小于10时,执行这个循环{printf("好好学编程\n");a++;//每执行一次循环a的值就自加1}return 0;
}

  • 当我输入的值为8的时候,8小于10,故输出一次。这时8要自加一次,变成9,9也小于10,故又执行一次输出。当下次时,a的值变成了10,不满足条件变不执行循环了

函数

  • 函数在语言的运用过程中十分广泛,在一些大型的编译程序中,函数的运用会显得十分重要
  • 下面是一个使用函数的c语言程序示例
 #define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int add(int x, int y)
{int z = x + y;//定义一个函数来完成两个整形数的加法return z;
}
int main()
{int a, b;scanf("%d %d", &a, &b);//主函数执行上面的add函数int c = add(a, b);printf("两个数总和=%d", c);return 0;
}
  • 从上面的例子可以看出对于函数来说,要有返回类型,形式参数,函数体三大类型
  • 注意:定义函数要在一个源文件之间去定义,如果没有在同一个头文件中,要使用extern关键字进行外部声明

数组

  • 数组是一组相同类型元素的集合
int arr[10]={1,2,3,4,5,6,7,8,9,10};//定义一个整形的数组,最多放10个元素
  • 注意:如果数组的元素没有满10个,则自动补0
  • 数组的每一个元素都有下标,数组的下标默认从0开始
  • 数组可以通过下面来访问
int arr[10]={0};
//下标的范围是0~9

int main()
{//不完全初始化,数组有4个元素,只给3个字符初始化,剩余一个没有给值,默认被初始化为'\0'char arr[] = { 'b', 'i', 't'};//[b i t \0]//[   ][ b i t ][                ]printf("%d\n", strlen(arr));//strlen函数返回\0之前的字符个数return 0;
}


操作符

  • 算术操作符
    + - * / %
    除法操作符/和上下类型有关,取余操作符%只能对整形使用
  • 移位操作符
    << >>
    移动二进制位
  • 位操作符
    & ^ |
    二进制的运算
  • 赋值操作符
    = += -= *= /= &= ^= |= >>= <<=
    对c语言的变量进行赋值
  • 单目操作符
!           逻辑反操作
-           负值
+           正值
&           取地址
sizeof      操作数的类型长度(以字节为单位)
~           对一个数的二进制按位取反
--          前置、后置--
++          前置、后置++
*           间接访问操作符(解引用操作符)
(类型)       强制类型转换
  • 关系操作符
>
>=
<
<=
!=      用于测试“不相等”
==      用于测试“相等”
  • 逻辑操作符
&&          逻辑与
||          逻辑或
  • 条件操作符
exp1 ? exp2 : exp3//如果exp1是真的话,执行exp2,假的话执行exp3
  • 逗号表达式
exp1, exp2, exp3, …expN//从左到右最后一个表达式为最终结果
  • 下标引用、函数调用和结构成员
[] () . ->

常见关键字

auto  break   case  char  const   continue  default  do   double else  enum
extern float  for   goto  if   int   long  register    return   short  signed
sizeof   static struct  switch  typedef union  unsigned   void  volatile  while
  • 我们重点说几个,之后会详细的讲解的
  • register寄存器关键字,频繁又大量使用的关键词建议放入寄存器中
  • auto每个局部变量都是auto都修饰的
  • typedef对类型名重命名
//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{//观察num1和num2,这两个变量的类型是一样的unsigned int num1 = 0;uint_32 num2 = 0;return 0;
}
  • static静态修饰变量和函数
  1. 修饰局部变量-称为静态局部变量
  2. 修饰全局变量-称为静态全局变量
  3. 修饰函数-称为静态函数
  • 修饰局部变量
//代码1
#include <stdio.h>
void test()
{int i = 0;i++;printf("%d ", i);
}
int main()
{int i = 0;for(i=0; i<10; i++){test();}return 0;
}
//代码2
#include <stdio.h>
void test()
{//static修饰局部变量static int i = 0;i++;printf("%d ", i);
}
int main()
{int i = 0;for(i=0; i<10; i++){test();}return 0;
}
  • static修饰局部变量改变了变量的生命周期
  • 让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
  • 修饰全局变量
//代码1
//add.c
int g_val = 2018;
//test.c
int main()
{printf("%d\n", g_val);return 0;
}
//代码2
//add.c
static int g_val = 2018;
//test.c
int main()
{printf("%d\n", g_val);return 0;
}
  • 一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。
  • 修饰函数
//代码1
//add.c
int Add(int x, int y)
{return c+y;
}
//test.c
int main()
{printf("%d\n", Add(2, 3));return 0;
}
//代码2
//add.c
static int Add(int x, int y)
{return c+y;
}
//test.c
int main()
{printf("%d\n", Add(2, 3));return 0;
}
  • 一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

#define 定义常量和宏

//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))//这里一定要加括号
#include <stdio.h>
int main()
{int sum = ADD(2, 3);printf("sum = %d\n", sum);sum = 10*ADD(2, 3);printf("sum = %d\n", sum);return 0;
}

指针

  • 内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
    所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
  • 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/35f963dccaba4e4286f953efc0d9570d.png
  • 变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。
#include <stdio.h>
int main()
{int num = 10;&num;//取出num的地址//注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)int *p=&num;//解引用p作为指针变量来存储numprintf("%p\n", &num);//打印地址,%p是以地址的形式打印return 0;
}

  • 指针变量的大小
#include <stdio.h>
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{printf("%d\n", sizeof(char *));printf("%d\n", sizeof(short *));printf("%d\n", sizeof(int *));printf("%d\n", sizeof(double *));return 0;
}
  • 因为一个指针变量存放一个变量第一个地址,所以32bit为4个字节(依机器而定)
  • 指针大小在32位平台是4个字节,64位平台是8个字节。

结构体

  • 结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
  • 比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息
struct Stu
{char name[20];//名字int age;      //年龄char sex[5];  //性别char id[15]; //学号
};//有冒号注意
//打印结构体信息
struct Stu s = {"张三", 20, "男", "20180101"};
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);
  • 当然(*p).name这样也是可以解引用成员的,结构体用.,指针用->

完结

  • 精讲部分将持续推送

C语言的初阶学习(1)相关推荐

  1. C语言初阶学习-----01初识C语言

    这是初识C语言,对有一定基础的同学帮助很大,看不懂的到以后对应的章节会详细介绍. 1.数据类型 char //字符数据类型 short //短整型 int //整形 long //长整型 long l ...

  2. [ 数据结构-C语言 ] 二叉树--初阶 大总结~~

    今天要和大家一起步入一个新的数据结构--二叉树.在学习了解二叉树之前我们先来了解什么是树. 以下是本篇的主要内容及目录 目录 1.树的概念及其结构 1.1树的概念 1.2树的相关概念(重点*) 1.3 ...

  3. c语言——指针初阶(2)

    目录 一.如何规避野指针 1.指针初始化 2.小心指针越界 3.指针指向空间被释放了及时把它变成空指针 4.及时的检查指针的有效性 5.个人小总结 二.指针运算 1.指针+-整数 2.指针-指针 前提 ...

  4. 【从零开始的C语言】初阶 数组应用之 扫雷

    文章目录 前言 一.扫雷的逻辑. 二.文件说明 1.game.h 2.test.c 3.game.c 初始化雷区 打印雷区 电脑随机布置雷 递归展开雷区 总结 前言 前面刚做好了数组的实战练习之三子棋 ...

  5. C++初阶学习————二叉树进阶(二叉搜索树)

    二叉树进阶 二叉搜索树的概念 二叉搜索树的操作 基本框架 二叉搜索树的插入 二叉搜索树的查找 二叉搜索树的删除 整体代码 循环写法 递归写法 二叉搜索树的应用 二叉搜索树的性能分析 前面的文章介绍过二 ...

  6. 前端三剑客之 HTML - JavaEE初阶 - 细节狂魔

    文章目录 前言 后端 && 前端的部分历史 - java 关于网站搭建 正文开始! HTML 怎么编写一个HTML的代码? 小拓展: 快速编写 HTML 代码的小技巧 浏览器的开发者工 ...

  7. R语言学习笔记——入门篇:第三章-图形初阶

    R语言 R语言学习笔记--入门篇:第三章-图形初阶 文章目录 R语言 一.使用图形 1.1.基础绘图函数:plot( ) 1.2.图形控制函数:dev( ) 补充--直方图函数:hist( ) 补充- ...

  8. C语言初阶第三篇:换我心,为你心,始知C语言 从C语言选择语句到循环语句保姆教学来喽

    换我心,为你心,始知C语言 老铁们,咱们上一篇文章把字符串的知识点给过了一遍,今天就要开始真正的程序语句的学习了,也就是选择语句和循环语句,今天的内容比较简单,所以写的也不多,废话不多说,咱们开始吧! ...

  9. 【学习总结】ctf隐写初阶解题思路与方法

    作为ctf中相对较为简单的题目,隐写题更适合初学者上手和提高初学者的兴趣.本人也对隐写术很感兴趣,于是尝试着对自己目前所学的隐写解题思路和工具的使用做一个总结.由于水平有限,总结可能会有错误的地方,希 ...

最新文章

  1. l-logger命令基本介绍
  2. MySQL数据库学习【第九篇】索引原理与慢查询优化
  3. 手机空间定位_你或许被默默定位很久了却不知情,盘点生活中各类定位技术
  4. GitHub项目管理维护实用教程
  5. Windows高精度微秒级(并发)定时器实现
  6. 抛体运动的小框架的源代码(rar)
  7. golang mysql大量连接_golang mysql 如何设置最大连接数和最大空闲连接数
  8. 泰坦尼克号python数据分析统计服_Titanic数据分析报告(Python)
  9. virtual析构函数(作用)
  10. 递归加载无限级分类,虽然我觉得效率不太好。
  11. .NET Remoting 分布式开发实例思想(转)
  12. 虚拟ONVIF 摄像机
  13. QThread 线程终止
  14. 取消移动端按钮按钮点击时的蓝色背景
  15. linux awk 区别,linux awk 中 RS,ORS,FS,OFS 区别与联系
  16. OBS studio黑屏解决办法
  17. 只需一张自拍,网易伏羲用这种方法直接生成「个人专属」游戏角色
  18. 8c SQL手册 三
  19. 安装autoconf
  20. 电视剧《天道》观后感

热门文章

  1. 微信小程序实现瀑布流(FlowLayout)效果
  2. java实现英文单词反转
  3. LeetCode刷题笔记 495. 提莫攻击
  4. 游戏党最佳吃鸡低延时蓝牙耳机,高续航随时随地驰骋战场
  5. 「项目管理工具」进度猫如何实现可视化?
  6. uniapp微信一键登录微信授权
  7. Android Studio中R.java的文件路径
  8. Vue elementUI中把数据库中的1,0转成男女
  9. 恒压供水仿真/1200plc/博途v15 可直接仿真运行
  10. es6中reduce的用法_es6中reduce的基本使用方法