摘要: 单链表
一.节点结构体定义 typedef int ElemType; typedef struct LNode { ElemType data; struct LNode * next; }*LinkList,LinkNode; 二.带有头结点的单链表 1.创建一个单链表 LinkList create(){ LinkList L = (LinkList)malloc(sizeof(LinkNode)); if(L == NULL){ printf("error!\n"); exit(-1); } ...
摘要: The strcmp() function compares two strings and returns an integer value based on their comparison. The strcpy() function copies the contents of one string to another, while the strcat() function appends the contents of one string to another. The strlen() function returns the length of a string, excluding the null terminator.
1.strcmp() 函数原型 int strcmp(const char *s1,const char * s2); 作用: 比较两个字符串的大小。根据他们的返回值可以判断两个字符串的大小关系。 返回0,表示两个字符串相等。 大于0,表示s1大于s2. 小于0,表示s1小于s2. 代码实现 int my_strcmp(const char *str1,const char *str2){ while(str1 && (str1 == *str2)){ str1++; ...
摘要: 原文链接:https://wangdoc.com/clang/flow-control
流程控制 C 语言的程序是顺序执行,即先执行前面的语句,再执行后面的语句。开发者如果想要控制程序执行的流程,就必须使用流程控制的语法结构,主要是条件执行和循环执行。 if 语句 if语句用于条件判断,满足条件时,就执行指定的语句。 if (expression) statement 上面式子中,表达式expression为真(值不为0)时,就执行statement语句。 if后面的判断条件expression外面必须有圆括号,否则会报错。语句体部分statement可以是一个语句,也可以是放在大括号里面的复合语句。下面是一个例...
摘要: 在C语言中,宏定义用于定义常数或简化代码,提高可读性并节约内存。通过宏定义,编译器会自动替换代码中的宏内容,避免了创建全局变量的内存消耗。使用宏时需注意:宏名称遵循标识符规则,定义时结束不加分号。宏只是文本替换,编译后代码将结合宏进行处理。同时,带参数的宏允许更多功能,比如计算两个数字的最大值,也支持嵌套定义。
define() 在c语言中我们可以使用宏定义,来定义一些常数,或者用于简化代码,通过宏定义不仅提高了代码的可读性,也在一定程度上节约了内存开销,比如,我们保存一个常量可能会使用全局变量的方式,但是这无疑会消耗内存,但是通过宏定义的方式,通过宏定义,编译器会自动将宏定义所定义的内容替换源代码中,然后再进行编译,这种方式不仅达到了使用全局变量声明的常数的效果,而且不会真正的创建一个变量,此外,可以使用宏来简化一些代码。 通过宏定义一个常量 ::: info 宏的名称个标识符的规则一致。 ::: #define MAX 100 :::error 特别注意使用`#def...
摘要: 本文介绍了C语言中的结构体应用,包括结构体的声明、成员变量赋值、结构体指针的使用、typedef的用法、通过函数传参传递结构体、结构体数组的定义、内存对齐问题以及文件读写中结构体数据的处理。结构体作为用户自定义的数据类型,可以有效管理复杂数据,通过指针可以实现更高效的操作,而typedef则简化结构体的声明和使用。此外,结构体数组允许存储多个相同类型的数据,内存对齐可以提高程序的运行效率,最后,文件读写是保证数据持久化的重要手段。
一.结构体的声明 1.创建一个结构体 struct Student { char * name; int age; }; 2.匿名结构体 顾名思义,就是没有名字的结构体,一般用于固定的结构体的变量,因为没有名字的原因,所有不能创建新的结构体变量,当然,使用typedef就另当别说了。 struct { char *name; int age; }stu1,stu2; // 这样我们就通过匿名结构体在程序运行时就只会创建stu1和stu2。 3.嵌套结构体 当我们需要表示比较复杂的数据结构的时候,这个时候我们就...
摘要: C 语言中的输入输出函数包括 printf、scanf、putchar、getchar、puts 和 gets 等。printf 用于简单字符串输出,通过占位符实现格式化输出,如 %d、%s、%f 等。scanf 用于输入,可以通过设置占位符将输入赋值给对应的变量。putchar 用于输出单个字符,getchar 用于获取用户输入的字符。puts 用于输出字符串,并自动换行。gets 用于读取用户一行输入,不跳过空白字符,遇到换行符结束。
一.printf() 1.基础语法 用于简单的字符串的输出 // printf 可用于字符的输出 printf("hello world"); printf("hello\nworld\n"); printf("hello\n"); printf("world\n"); 2.占位符 在其他的语言中也可以被成为模板语法,当我们需要输出变量或者表达式的值的时候,就可以使用占位符来完成这件事,通过在 printf 函数的第一个参数中增加 %【x】 实现占位操作。 // 单个占位符 printf("This is a simple e...
摘要: 排序算法是计算机科学中的基本算法之一。常见的排序算法包括选择排序、冒泡排序、插入排序和快速排序。选择排序通过不断选出数组中的最小元素,将其放到已排序序列的末尾,直到整个数组排序完成。冒泡排序则通过相邻元素的比较和交换来将未排序的元素逐步移动到正确的位置。插入排序是通过构建有序序列,对未排序数据逐个插入的方式来进行排序。快速排序则采用分治法,通过一趟排序将数组分割成独立的两部分,然后分别对这两部分进行排序。
排序算法 排序算法的学习。 1.选择排序 /* 选择排序 */ void selectionSort(int arr[],int arrSize){ for(int i=0;iarr[j]){ swap_1(arr,i,j); } } } printf("选择排序后:"); print(arr,arrSize); } 2.冒泡排序 /* 冒泡排序 */ void bubbleSort...
摘要: 文件指针、fopen()、fclose()、EOF的介绍。
一.文件打开与关闭 文件指针 定义一个文件指针 FILE *fp; fopen() 函数原型 FILE* fopen(char* filename, char* mode); 在通过 fopen 打开一个文件时,系统会先创建一个缓冲区,所有的读写操作其实就是针对缓冲区,而不是文件本身,如果打开失败会返回 NULL 。 fopen()的模式字符串有以下几种。 r:读模式,只用来读取数据。如果文件不存在,返回 NULL 指针。 w:写模式,只用来写入数据。如果文件存在,文件长度会被截为0,然后再写入;如果文...
摘要: 在 c 语言中,动态内存申请是一种重要的操作,它可以让程序在运行时动态地分配内存空间。常用的动态内存申请函数有 malloc、calloc、realloc 和 free。这些函数可以用来申请内存空间、初始化内存、扩容内存以及释放内存。动态内存申请在一维数组和二维数组的创建中得到应用,同时需要谨慎使用,避免内存泄漏和重复释放。
一.前言 在 c 语言中,静态类型一般都存储在栈区,而动态内存一般都在堆区,在之前的学习中,我们知道在c语言中如果要创建一个可变的数组,当然,你可以使用 C99 标准中的新的规范,允许你使用变量动态的创建数组大小,但是在这之前,你只能使用宏定义的方式,还有我们今天要说的东西 --- 动态内存申请; 二.malloc 在使用之前,我们需要先将 malloc 所在的包引入。 #include 下面就是一个简单的例子申请一个动态内存。 int *p = (int *)malloc(sizeof(int)); ...
摘要: 本文简要介绍了C语言中指针的基本概念及其在不同场景下的使用。指针是保存地址的变量,通过&获取变量的地址并使用*解引用访问其值。指针可以指向数组的第一个元素,数组名即代表第一个元素的地址。定义指向数组的指针时需注意括号使用,避免歧义,如int (*pa)[] = &a。还介绍了元素为指针的数组,通过这种数组可以访问指向的变量的值。文章通过实例代码说明了指针在这些场景下的用法和注意事项。
初识数组 1.一维数组 a.声明一个一维数组 int a[] = {12,12,3,12,3}; // 等价于 int a[5] = {12,12,3,12,3}; ::: error 特别注意 使用{}给数组赋值时,只能在数组被声明的时候使用,因为c语言在创建数组的时候数组的地址是不能被改变的,下面的例子都是错误。 // 错误 int a[10]; a = {12,23,2,3}; // 错误 int a[] = {123,23,,23}; a = {123}; // 错误 int a[10] = {12}; a=NULL;...