数据结构
1.数组 Array
储存多个值的变量,通过下标 INDEX 指定获取的某个值,大多数语言中下标都从 0 开始。
2.字符串 String
和数组相似,是由字母、数字、符号等组成的数组,大多数语言中用引号包裹起来的是字符串。一般以二进制 0 作为字符串的结尾。一般 print 函数寻找这个标记来结束打印,同时字符串有很多内置处理函数,例如字符串连接 strcat。
3.矩阵 Matrix
矩阵是数组的数组 j={{10,15,12}, {8,7,42}, {1,5,34}},这个例子通过两个下标来获取某个值,例如 j[1][2] 就是 42。矩阵可以是任意维度,几维矩阵就用几个下标来获取值。
4.结构体 Struct
结构体将多个变量打包在一起,可以将不同类型变量形成一个集合代表某种业务含义。
STRUCT account
VARIABLE accountNumber
VARIABLE balance
END STRUCT
5.指针 Pointer
指针是一种特殊的变量,指向一个内存地址。
6.节点 Node
使用指针存储
STRUCT node
VARIABLE i
POINTER next
END STRUCT
7.链表 Linked List
链表由许多节点组成,每个节点都有一个指针指向下一个节点。链表非常灵活,可以在任意位置插入或删除节点。常见循环链表 CIRCULAR 和非循环链表(最后一个指针是二进制 0,含义是 null,代表链表的尽头)。
数组大小需要在使用前定义好,而链表大小可以动态增减。
8.队列 Queue
基于链表非常容易实现,先进先出 FIFO。出队 dequeue 只需要将头指向当前的 NEXT 节点,入队 enqueue 只需要将尾指向新的节点。
9.栈 Stack
基于链表非常容易实现,和队列相似,但是后进先出 LIFO。出栈 pop 只需要将头指向当前的 NEXT 节点,入栈 push 只需要新的节点的 NEXT 指向当前的头,当前头重新标记为新的节点。
10.树 Tree
多个节点有前后顺序组合在一起就形成了树,最高的节点称为根节点 ROOT,最底层的节点称为叶子节点 LEAF。上层节点叫做 parent,下层节点叫做 child。输的一个核心特征是从根节点到叶子节点是单向的。
11.二叉树 Binary Tree
当 parent 节点最多只有两个 child 节点时,就是二叉树。
STRUCT node
VARIABLE i
POINTER nextLeft
POINTER nextRight
END STRUCT
12.图 Graph
如果数据要打破树的单向限制,就是图。图中没有父子,方向是任意的。图的节点称为顶点 vertex,顶点之间的连接称为边 edge。
13.其他
在很多场景中,还有其他高效的数据结构,例如红黑树、堆。选择合适的数据结构能大大提高算法效率,减少算法复杂度和编程复杂度。