1. 表
| 顺序表 | 线性链表 | 静态链表 | 循环链表 | 双向链表 |
---|
存储空间 | 预定义初 | 动态分配malloc | 预定义最大 | 动态分配 | 动态分配 |
指针 | elem | head、tail | cur | 头/尾 | L |
头结点 | – | 有 | 有 | 有 | 有 |
结点 | – | data、next | data、next | data、next | prior、data、next |
适用 | 查找求长 | 插入删除 | 综合 | 有尾联结 | 查前 |
| 顺序栈 | 链栈 | 循环队列 | 链队列 |
---|
存储空间 | 预定义初始与增量 | – | 预定义最大队列 | 动态分配malloc |
指针 | base、top | s | front、rear | front、rear |
头结点 | – | – | – | 有 |
结点 | – | data、next | – | data、next |
| 定长顺序 | 堆分配 | 块链 |
---|
存储空间 | 预定义最大串长 | 动态分配malloc | 预定义块大小 |
指针 | – | – | head、tail |
结点 | – | – | ch[]、next |
缺点 | 截断 | – | 存储量大操作复杂 |
优点 | – | 空间自由 | 尾指针便于联结 |
| 顺序表示 |
---|
存储空间 | 预定义最大维度,以所需维度分配 |
指针 | base、bounds、constants |
| 三元顺序表 | 行逻辑链接的顺序表 | 十字链表 |
---|
直观表示 | 非零值 | 非零值 | 非零值 |
非零值信息 | 行信息 | 行信息 | 结点 |
优点 | 转置 | 便于存取任意行非零元、乘 | 便于插入删除、加法 |
| | 固定rops | – |
2. 树
| 双亲表示法 | 孩子表示法 | 孩子兄弟表示法(二叉链表) |
---|
直观表示 | 双亲是谁 | 孩子有谁 | 树的结构 |
双亲信息 | parent(T,x) | –/添加 | 增加parent域 |
孩子信息 | 遍历 | 链结点 | firstchild域 |
优点 | 便于双亲操作 | 便于孩子操作 | 树的各种操作 |
缺点 | 孩子操作不便 | 双亲操作不便 | – |
- 结点结构比较
1、双亲表示法
2、孩子表示法
链表头 | TElemType data | firstchild |
---|
| 指向第一个孩子结点 | |
3、孩子兄弟表示法
TElemType data | firstchild | nextsibling |
---|
| 指向第一个孩子结点 | 指向下一个兄弟结点 |
3. 图
| 数组表示法 | 邻接表 | 十字链表 | 链接多重表 |
---|
直观表示 | 所有点弧信息 | 邻接点、弧 | 弧 | 弧 |
适用 | 无向图、有向图 | 无向图、有向图 | 有向图 | 无向图 |
弧信息 | arc[i][j] | i、sdjvex | ivex、jvex | ivex、jvex |
出度信息 | 行之和 | 链结点数 | firstin链结数 | – |
入度信息 | 列之和 | 遍历、逆邻接表 | firstout链结数 | – |
构造时间复杂度 | n^2+n*e | n+e | n+e | – |
| – | n*e | n*e | – |
优点 | 信息全 | 节省存储 | 易判任意两点关系 | 增删方便 |
缺点 | 存储大 | 信息不全 | – | – |
- 头结点比较(作为一种索引)
1、邻接表
2、十字链表
data | firstin | firstout |
---|
– | 指向第一个以该顶点入的弧 | 指向第一个以该顶点出的弧 |
3、邻接多重链表(无向图)
data | firsedge |
---|
– | 指向第一个依附于该顶点的边 |
- 表(弧)结点比较
1、邻接表
adjvex | nextarc | info |
---|
与顶点邻接的点 | 下一条边或弧的点 | – |
2、十字链表
tailvex | headvex | hlink | tlink | info |
---|
出顶点 | 入顶点 | 入弧 | 出弧 | – |
3、邻接多重链表(无向图)
mark | ivex | ilink | jvex | jlink | info |
---|
是否visit | – | 依附于ivex的边 | – | 依附于jvex的边 | – |
如果程序过于繁琐,总感到一些步骤在重复,可以看一下存储结构。存储结构具体实现会随真实场景而变,可以自定义所需。
我跟你
我跟大家,同时大家又是我,出现偏差,出现大家跟大家的情况,需要限定,只能跟新的人有关系
大家跟大家
抽象一旦具体,会存在偏差