什么是算法
**是对特定问题求解步骤的一种描述,是指令的有限序列**
**评价算法的优劣:
时间复杂度和空间复杂度其实就是所耗时间与空间关于输入数据规模的函数
1)时间复杂度
算出结果的时间花费多少
2)空间复杂度
算出结果需要的内存字节的多少
3)可读性和可维护性**
什么是数据结构
**是相互之间存在的一种或者多种特定关系的数据元素的集合
数据结构包含三个层面:
1)逻辑结构
2)物理结构
3)运算结构
实际编程过程中使用比较多的逻辑数据结构
栈
特点:后进先出
顺序存储:stack_base_array.c stack_base_array.h stack_base_array_test.c
gcc stack_base_array.c stack_base_array_test.c
链式存储:stack_base_list.c stack_base_list.h stack_base_list_test.c
gcc stack_base_list.c stack_base_list_test.c
队列:先进先出
顺序存储:queue_base_array.c queue_base_array.h queue_base_array_test.c
gcc queue_base_array.c queue_base_array_test.c
链式存储:queue_base_list.c queue_base_list_test.c queue_base_list.h
gcc queue_base_list.c queue_base_list_test.c**
二叉树
**有序二叉树
笔试题容易考的内容:先序遍历 中序遍历 后序遍历的实现算法
重点:创建二叉树 插入节点 三种遍历方式
删除节点 销毁二叉树**
排序与查找
**排序
冒泡排序(笔试题容易考)
大数据沉底
插入排序:第一个数据自然有序
前两个数据排序 使其有序
前三个数据排序 使其有序
。。。
前n个数据排序 使其有序
选择排序:选出小的放到前面
快速排序:排序速度最快的
归并排序:**
查找:
**线性查找
二分查找**
语法错误:
**只关注只解决第一个错误,如果错误所在行检查不出错误,往前找 不要往后找**
程序BUG(逻辑错误)的解决方式
**1)print打印(用的最多)
2)gdb单步调式程序
vim gdb.c
gcc gdb.c -g //-g, 使生成的可执行程序中包含调试信息
gdb a.out
(gdb)l //l, list 列出代码
(gdb)l
(gdb)b 10 //b, breakpoint(断点) 程序执行到断点位置 自动暂停
// 在i=0;行上设置了断点
(gdb)r //r, run 运行程序
//程序运行到第10行暂停 注意第10行代码尚未执行
(gdb)l 10
(gdb)p a //p, printf 打印
//打印a 变量的取值
(gdb) p str
(gdb)p &a //打印a的地址
(gdb) p name //打印数组内容
(gdb)l 10
(gdb)n //next, 单步执行 执行一步就停下来
(gdb)n
(gdb)n // 执行了a+i代码
(gdb) p i
(gdb) p a
(gdb) n
(gdb) n
(gdb) p name
重复执行for循环的过程
(gdb) b 17 // printf("%s\n", name); 加断点
(gdb) c //continue, 继续 直到遇到断点才暂停
(gdb) p name
(gdb) q //quit 退出
通过以上方式可以监视你的程序每个一个执行步骤 每步之后变量取值是否是你需要的值都可以观察
快速定位段错误的方式:
gcc gdb.c -g
ulimit -c unlimited
./a.out 执行会出段错误的程序
ls core //如果产生段错误,会产生一个core文件
gdb a.out -c core
(gdb) bt **