1.课程安排表:
1. 线性表
2. 字符串
3. 栈和队列
4.树
5.查找
6.排序
7.暴力枚举法
8.广度优先搜索
9.深度优先搜索
10.分治
11.贪心
12.动态规划
13.图
14.数学方法与常见模型
15.大整数运算
16. 基础功能
2. 编程技巧:
1.把较大的数组放在main 函数(全局变量)外,作为全局变量,这样能够防止栈溢出,由于栈的大小是有限制的。GCC (C编译器) 段错误
2.假设可以预估栈,队列的上限,则不要用stack,queue,使用数组来模拟,这样速度最快。
3.输入数据一般放在全局变量,且在执行过程中不要改动这些变量。
4.在推断两个浮点数a 和b 是否相等时,不要用a==b,应该推断二者之差的绝对值fabs(a-b) 是否小于某个阈值,比如1e-9。
5.推断一个整数是否是为奇数,用x % 2 !=0,不要用x % 2 ==1,由于x 可能是负数。
6.用char 的值作为数组下标(比如,统计字符串中每一个字符出现的次数),要考虑到char 可能是负数。有的人考虑到了,先强制转型为unsignedint 再用作下标,这仍然是错的。正确的做法是,先强制转型为unsignedchar,再用作下标。这涉及C++ 整型
提升的规则,就不详述了。3.线性表小结:
题目:高速找到未知长度单链表的中间节点。
设置2个指针,一開始同一时候指向头,第一个指针比第二个指针快2倍
4. 字符串函数的内部实现
1.strlen
描写叙述:实现strlen,获取字符串的长度。函数原型例如以下:
int strlen(const char *str)
代码:
int strlen(const char *str) { const char *s; for(s=str; *s; ++s) ; return (s-str); }
2.strcpy
实现strcpy,字符串拷贝函数,函数原型例如以下:
char*strcpy(char *to, const char *from);
代码:
char *strcpy(char *to, const char *from) { assert(to != NULL && from != NULL);//断言错误 char *p = to; while((*p++ = *from++) != '