存储结构整理

1. 表

顺序表线性链表静态链表循环链表双向链表
存储空间预定义初动态分配malloc预定义最大动态分配动态分配
指针elemhead、tailcur头/尾L
头结点
结点data、nextdata、nextdata、nextprior、data、next
适用查找求长插入删除综合有尾联结查前

  • 栈、队列
顺序栈链栈循环队列链队列
存储空间预定义初始与增量预定义最大队列动态分配malloc
指针base、topsfront、rearfront、rear
头结点
结点data、nextdata、next

定长顺序堆分配块链
存储空间预定义最大串长动态分配malloc预定义块大小
指针head、tail
结点ch[]、next
缺点截断存储量大操作复杂
优点空间自由尾指针便于联结

  • 数组
顺序表示
存储空间预定义最大维度,以所需维度分配
指针base、bounds、constants

  • 矩阵的压缩存储
三元顺序表行逻辑链接的顺序表十字链表
直观表示非零值非零值非零值
非零值信息行信息行信息结点
优点转置便于存取任意行非零元、乘便于插入删除、加法
固定rops
ijerightdown
行后继列后继

  • 广义表
头尾链表扩展线性链表
原子结点是否有链域
tag=1hptp
表结点指向表头指向表尾
tag=0atom
原子结点值域
tag=0atomtp
原子结点值域指向表尾




2. 树

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

- 结点结构比较

1、双亲表示法

TElemType dataparent

2、孩子表示法

链表头TElemType datafirstchild
指向第一个孩子结点
孩子int childnext
下一个孩子结点

3、孩子兄弟表示法

TElemType datafirstchildnextsibling
指向第一个孩子结点指向下一个兄弟结点




3. 图

数组表示法邻接表十字链表链接多重表
直观表示所有点弧信息邻接点、弧
适用无向图、有向图无向图、有向图有向图无向图
弧信息arc[i][j]i、sdjvexivex、jvexivex、jvex
出度信息行之和链结点数firstin链结数
入度信息列之和遍历、逆邻接表firstout链结数
构造时间复杂度n^2+n*en+en+e
n*en*e
优点信息全节省存储易判任意两点关系增删方便
缺点存储大信息不全

- 头结点比较(作为一种索引)

1、邻接表

datafirstarc
指向链表第一个结点

2、十字链表

datafirstinfirstout
指向第一个以该顶点入的弧指向第一个以该顶点出的弧

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

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

- 表(弧)结点比较

1、邻接表

adjvexnextarcinfo
与顶点邻接的点下一条边或弧的点

2、十字链表

tailvexheadvexhlinktlinkinfo
出顶点入顶点入弧出弧

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

markivexilinkjvexjlinkinfo
是否visit依附于ivex的边依附于jvex的边

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

我跟你

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

大家跟大家

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值