存储结构整理

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
i j e right down
行后继 列后继

  • 广义表

头尾链表 扩展线性链表
原子结点是否有链域
tag=1 hp tp
表结点 指向表头 指向表尾
tag=0 atom
原子结点 值域
tag=0 atom tp
原子结点 值域 指向表尾




2. 树

双亲表示法 孩子表示法 孩子兄弟表示法(二叉链表)
直观表示 双亲是谁 孩子有谁 树的结构
双亲信息 parent(T,x) –/添加 增加parent域
孩子信息 遍历 链结点 firstchild域
优点 便于双亲操作 便于孩子操作 树的各种操作
缺点 孩子操作不便 双亲操作不便

- 结点结构比较

1、双亲表示法

TElemType data parent

2、孩子表示法

链表头 TElemType data firstchild
指向第一个孩子结点
孩子 int child next
下一个孩子结点

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、邻接表

data firstarc
指向链表第一个结点

2、十字链表

data firstin firstout
指向第一个以该顶点入的弧 指向第一个以该顶点出的弧

3、邻接多重链表(无向图)

data firsedge
指向第一个依附于该顶点的边

- 表(弧)结点比较

1、邻接表

adjvex nextarc info
与顶点邻接的点 下一条边或弧的点

2、十字链表

tailvex headvex hlink tlink info
出顶点 入顶点 入弧 出弧

3、邻接多重链表(无向图)

扫描二维码关注公众号,回复: 4174656 查看本文章
mark ivex ilink jvex jlink info
是否visit 依附于ivex的边 依附于jvex的边

如果程序过于繁琐,总感到一些步骤在重复,可以看一下存储结构。存储结构具体实现会随真实场景而变,可以自定义所需。

我跟你

我跟大家,同时大家又是我,出现偏差,出现大家跟大家的情况,需要限定,只能跟新的人有关系

大家跟大家

抽象一旦具体,会存在偏差

猜你喜欢

转载自blog.csdn.net/andor5/article/details/84293702