基本数据结构
动态集合的元素:每个元素都有一个对象来表示,并可以假定对象中的一个属性为标识关键字。对象可能包含卫星数据。
动态集合上的操作:简单返回有关集合信息的查询操作和改变集合的修改操作。一些标准的操作如下:search, insert, delete, minimum, maxinum, successor, predecessor。
栈
栈实现的是一种后进先出的策略,被删除的是最近插入的元素。下面使用数组实现栈的结构。
|
|
队列
队列实现的是一种先进先出的策略:被删去的总是在集合中存在时间最长的那个元素。
|
|
链表
链表中各对象按照线性顺序排列,单向链表的每个元素包括next指针(指向下一个元素)和该元素关键字的值。此外,还有单向循环链表、双向链表和双向循环链表。
|
|
指针和对象的实现
- 对象的多数组表示。以双向链表为例,分别使用三个数组存放next, prev, key,对于给定数组下标x,三个数组项next[x], prev[x], key[x]一起表示链表中的一个对象。此外还需要另一个变量存放表头元素的下标。
- 对象的单数组表示。一个对象占用一段连续的子数组nums[j..k],对象中的每个属性对应于从0到j-k之间的一个偏移量,指向该对象的指针就是下标j。以双向链表为例,对象具有的属性key, next, prev,则可以设置对应的偏移量为0, 1, 2。(在上面的例子中,如果指向某个对象的指针为下标x,则指向下一个对象的指针为下标x+3)
对象的分配和释放
略
有根树的表示
- 二叉树:属性p, left, right存放指向父节点、左孩子、右孩子的指针。
- 分支无限制的有根树:左孩子右兄弟表示法。x.left-child, x.right-sibling分别指向结点x最左边的孩子结点和x右侧相邻的兄弟结点。