数据结构需要掌握的C语言基础
1. 数据类型、变量和常用算术运算
数据类型及变量定义与输入输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 int a; float b = 3.14 ;char c = 'Y' ;bool d = true ; scanf ("%d" , &a);scanf ("%d" , &d);scanf ("%f % c" , &b, &c);printf ("%d %f %c %d" , a, b, c, d);
常用算术运算
1 2 3 4 5 6 7 8 9 int a = 10 , b = 6 ;printf ("%d" , a + b); printf ("%d" , a - b); printf ("%d" , a * b); printf ("%d" , a / b); printf ("%d" , a % b); printf ("%f" , a * 1.0 / b);
2. 判断语句与逻辑运算
if-else 结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 if (条件1 ){ xxxx(满足条件1 执行的语句) } else if (条件2 ){ xxxx(满足条件2 执行的语句) } .... else { xxxx(上面条件都不满足执行的语句) } ``` > 如果整数变量a = 10 , 则将自增10 。否则,a>=5 ,则将其自增5 后并打印a。如果上述条件都不满足,则自增1 。 ```c int a = 10 ;if (a == 10 ) { a += 10 ; } else if (a >= 5 ) { a += 5 ; printf ("%d" , a); } else { a += 1 ; }
1 2 3 4 5 6 7 8 9 10 11 int a = 5 ;if (a) printf ("a不是0" ); else printf ("a一定为0" ); bool b = true ;if (b) printf ("b是%d" , b); else printf ("b是%d" , b);
逻辑运算符
1 2 3 4 5 int a = 3 , b = 10 ;if (a > 5 && b > 5 ) if (a > 5 || b > 5 ) if (a != 5 || b > 10 ) if (!a)
3. 循环语句
for 循环
1 2 3 for (int i = 0 ; i < 10 ; i++) { printf ("hello %d\n" , i); }
补充知识点: i++和++i的区别
1 2 3 4 int a = 5 ;int b = a++; int c = ++b; int d = c--;
for循环()里的i++和++i没有区别,怎么写都行
局部变量和全局变量
1 2 3 int i = 0 ;for ( ; i < 10 ; i++);printf ("%d" , i);
while 循环
1 2 3 4 5 int i = 0 ;while (i < 10 ) { printf ("hello %d\n" , i); i++; }
for和while循环几乎可以互换使用, for的优势在于初始化和循环变量修改比较直观。但是如果有很多给=个循环变量,for循环就变得很庞大了,while的优势就体现出来了。
1 2 3 4 5 6 7 8 for (int i = 0 , j = i + 1 , k = j * 2 ; i < 100 ||j < 50 ||k < 500 ; i *= 2 , j += 3 , k %= 2 )int i = 0 , j = i + 1 , k = j * 2 ;while (i < 100 ||j < 50 ||k < 500 ){ i *= 2 ; j += 3 ; k %= 2 ; }
循环控制
continue
:跳过本次循环剩余部分
break
:跳出整个循环
4. 数组和字符串
数组定义与初始化
1 2 3 4 int A[5 ] = {9 , 5 , 3 , 7 , 5 };int B[10 ]; int C[10 ] = {0 }; int D[10 ] = {1 };
字符数组(字符串)
1 char E[10 ] = {'a' , 'p' , 'l' , 'e' };
5. 指针与动态内存分配
💡指针就是地址、指针就是地址、指针就是tmd地址!!!
指针基础
1 2 3 int a = 10 ;int *p = &a;printf ("%d" , *p);
动态内存分配
1 2 3 4 5 6 7 int *p = (int *)malloc (sizeof (int ));*p = 10 ; free (p);int *arr = (int *)malloc (5 * sizeof (int ));free (arr);
⚠️ 注意:静态分配在栈上,动态分配在堆上,需手动释放。
6. 结构体与 typedef
结构体定义与使用
1 2 3 4 5 6 7 8 struct student { float score; int age; }; struct student s1 ;s1.age = 18 ; s1.score = 95.5 ;
使用 typedef 简化
1 2 3 4 5 6 7 8 typedef struct student { float score; int age; } student, *stu; student s1; stu p = (stu)malloc (sizeof (student)); p->age = 18 ;
7. 函数与参数传递
值传递 vs 指针传递
1 2 3 4 5 6 7 8 9 10 11 12 13 void swap (int a, int b) { int temp = a; a = b; b = temp; } void swap (int *a, int *b) { int temp = *a; *a = *b; *b = temp; }
全局变量与局部变量