抽象数据类型(ADT)是C程序员不可或缺的工具,这是由他们的属性所决定。
这类ADT有链表,堆栈,队列,树等。
内存分配:
所有ADT都需要确定一件事情——如何获得内存来存储值。有3种可选方案:
1.静态数组:长度固定,最为简单
2.动态分配的数组:可以运行时再决定数组的长度。如果需要的话,可以分配一个新的更大的数组,再把原来数组元素复制到新数组,然后删除原先的数组,从而动态改变数组长度的目的。
3.动态分配的链式结构:提供了最大程度的灵活性,这种方式对元素的数量几乎无限制,但是链式结构的链接字段需要消耗一定的内存,在链式结构中访问一个特定元素的效率不如数组。
以上内容基本上涉及到数据结构了,动态分配毫无疑问与指针密切相关,在此就不过多的描述三类。但毫无疑问,学习指针可以更好的理解此类结构。
标准函数库是一个工具箱,极大扩展了C程序员的能力。尽管后来C++的出现,使得C语言部分函数库出现了改变,但大体上并未太大变动,在此,写一些个人认为比较有趣的函数库。
字符转换<stdlib.h>
int atoi(char const string);
long int atol(char const string);
long int strtol(char const* string,char **unused,int base);
atoi和atol差不多,都是将字符串转换为数值,只是前者返回int型后者返回long int型。
strtol()中的base是指进制,如12表示12进制,10表示10进制。
若base16进制那么“a,b,c,d,e,f”为合法字符。
例如x=strtol(" 590bear",next,12);
x的值为9947,首先,590b是合法字符,因为12进制,所以b也是合法字符。
然后e是非法字符,到此程序结束,将e存入到next所指向的变量中。
处理器时间<time.h>
clock_t clock(void);
返回从程序开始执行起处理器所消耗的时间