数据结构——堆、栈、队列、树、图

数据结构中的堆栈:

堆可以看成一棵按顺序排列的完全二叉树,根节点可以为大于等于任何子节点(也可以小于等于任意子节点,看具体的排序方法),在存取时没有任何限制,可以随意的访问某一个子节点。

栈或者称为堆栈(stack),可以看成是一些堆起来的盘子,桶状线性数据结构。但是栈是受限制的线性数据结构,只允许先进后出,并且只能在栈顶进行插入删除操作。

内存区的堆栈:

首先了解下内存区:堆区存放程序员申请的动态内存,栈区存放系统分配内存的局部变量,静态区存放全局变量和静态变量,只读区存放常量(常量比如函数中使用的字符串“123”)和程序代码。(还有没列出的分区)

堆是由程序员主动申请的动态内存,其内存大小灵活可操控,处于高地址区域,地址的增长方向是向上的,堆的地址空间是不连续的。c程序中有malloc来动态分配内存,对象化编程语言中有new 来实例化对象,这个对象相关的数据也存储在堆中。

栈是由系统自动分配的地址,栈的地址位于低地址区域,增长方向向下,栈的地址空间是连续的。栈的总体地址空间有限,通常不会太大(可能为2M),栈存放的是方法内的局部变量。 

内存区堆栈的区别:

堆由程序员申请动态分配,内存灵活,可以很大,地址不连续,栈由系统自动分配,内存较小,地址连续。堆的生命周期比栈长,需要程序员主动释放或者有垃圾回收机制处理,栈的数据在函数运行过后就被释放。堆的响应速度比栈慢,更新速度比栈慢。

数据结构队列:

队列同样是受限制的线性数据结构,队列只允许在队尾进行插入操作,在队头进行删除操作。普通顺序队列的队满情况是rear-front=MAXSIZE,普通的顺序队列有假溢出的情况,因为只在队尾插入、队头删除,所以队头被删除的空间也不能存放新的数据。初始情况下rear=front=-1。

循环队列是头尾相接的队列,当队列插入时,rear+1,当队列删除时,front+1。循环队列的队满与队空都有rear=front。为了便于区分队空还是队满可以用一个变量num来计数,还可以空置rear和front之间的一个空间。

数据结构树

结点的度:结点的子树的数目

叶子结点:度为0(没有子树)的结点

分支结点:度不为0的结点,子树不为0

树的深度:树结点的最大层数

树的度:各节点的度的最大值,例如某一结点有3个子树是,其余结点都小于或者等于3个子树,则此树的度为3,称为三叉树

森林:m课互不相交的树的集合

非空二叉树第i层上最多有2^(i-1)个结点 ,一颗深度为h的二叉树中,最多有2^h-1个结点

满二叉树,深度为h,则结点必有2^h-1个结点

完全二叉树按照从上至下,从左至右的顺序安排结点,不能出现本层中左边结点没满,右边出现结点的情况

哈夫曼树,构建具有最小带权路径长度的二叉树,最优二叉树(第一笔试回顾有提到哈夫曼树的构建)

数据结构图

图由顶点的集合V和顶点之间的关系集合R构成。

例如G1=(V,E)

V={V1,V2,V3,V4,V5}

E={(v1,v2),(v1,v3)}

表示无向图中,结点v1和v2相连,v1和v3相连。其中与某结点相连的线段的数目称为该节点的度。

例如G2=(V,A)

V={V1,V2,V3,V4,V5}

A={<v1,v2>,<v1,v3>}

G2表示有向图中,v1和v2相连,v1和v3相连。

有向图在结点与结点之间有箭头的导向。其中某结点发出箭头线段的数量称为出度,接收到的箭头线段数量称为入度。

无向完全图:任意两结点间都有一条边直接相连的图。边的数目为:n*(n-1)/2。

有向完全图:任意两结点间都有相反方向的带箭头的弧(就是带箭头的线段,方向相反)连接。弧的数目为:n*(n-1)。

图的存储结构有邻接矩阵和邻接表

邻接矩阵根据图结点的个数 n 转换成 n 阶矩阵。两结点间有连线,则置值为1。

例如G1=(V,E)

V={V1,V2,V3,V4}

E={(v1,v2),(v1,v3)}

邻接矩阵为

                 v1  v2  v3  v3

  v1            0    1    1    0

  v2            1    0    0    0

  v3             1    0   0     0

  v4             0    0   0     0

 

邻接表为:v1—>v2—>v3

                  v2—>v1

                  v3—>v1

学习记录,以供后面再翻阅!以上,祝好!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值