C语言内建数据结构类型
整型
整型数据是最基本的数据类型,不过从整形出发衍生出好几种integer-like数据结构,譬如字符型,短整型,整型,长整型。他们都是最基本的方式来组织的数据结构,一般是几位bytes,首个bit也许是符号位,剩下的(从大小端)读出来作为数值。
浮点型
指针型
[========]
C语言聚合数据结构类型
数组
数组名字
数组名字在两种情况下是作为非第一个成员的指针常量,这里的两个情况是取数组名的地址:这是取数组的地址,不是取第一个成员的地址,第二个情况是sizeof的操作,这个操作是计算这个数组的总大小,而不是第一个成员的。
PS:指针的加法运算是需要按照指针指向的数据类型来递加。
下标引用和间接访问对比
作为实参传递和作为形参声明
初始化
长度计算
结构体
联合
枚举
链表
链表是许多更加高级的数据结构的基础,链表是一串链条似的结构体节点通过指针的方式链接起来,链表有分为单向链表和双向链表。
链表有个一个head node,有一个cursor。这个链表最大的问题在于每次检索node或者node里面的具体member,都是从head node开始逐一retrieve的。
初始化
索引
插入和追加
单向链表:
- 对于链表的插入,一种方式是采用常规的pervious/next node points的方式来breakup,再手拉手牵起来。
另一种方式是巧妙的使用指向指针的指针来实现,非常巧妙,以遇到指针的指针的时候要特别注意,在
**linkp
传递过来之后,*linkp
只是一个新产生的临时变量
双向链表:
一种是规则串联的双向链表,还有无法规则串联起来(混乱的)双向链表。
"Pointers on C"这本书对于链表的讲解不是很详细,书中提到的的链表需要注意的是链表尾部需要及时判断,需要插入的书在链表头或者尾该怎么处理。修改
删除
排序和销毁
真正理解这个概念可以参考Linux开发基础篇,这个在Linux里面是重要基础知识
[========]
[========]
C语言抽象数据结构
栈
队列
常用的是队列,这个在网络编程中常常用作收发包buffer的实现。实现队列的方式主要有静态数组,动态数组和链表,尤其是以链表为常用。
树
图
[========]
数据属性
这是一好的数据结构,这离得人们都说这个数据结构是好的。