《数据结构学习总结》--表,队列,堆栈

表,队列,堆栈

我们再数据结构里面的上一级抽象可以具有


<抽象表>

【实现】和【操作】


抽象表的《实现》


而实现是指,具体在内存空间中的表现形式

在【内存空间】中分为两个【区】,分别是【栈空间】,【堆空间】 

栈空间,常常用于存放基本数据类型,由系统自行管理和回收

堆空间,由用户进行分配和回收管理

因此,我们的抽象表在内存空间中的实现可以有两种形式,

一种是栈空间的形式,在内存中开闭一块数组,我们称为:【数组表示法】

另一种是在堆空间的形式,在内存中开辟(new)一块的空间【动态分配法】


抽象表的《操作》

可以理解为虚函数

具体设计:增删查改


 <表>

可以说只是简单的继承抽象表,然后进行具体实现

<队列>

继承抽象表,增加了约束:一端rear输入,另一端front输出

<堆栈>

堆栈也是继承了抽象表,增加了约束:只能在一端(所谓的栈顶)进行输入和输出

另外说明一下,为什么叫他做堆栈,而不叫栈堆? 那是因为他继承于抽象表这一父类,所以我们可以直接断定他是堆空间里面的表,然是他却拥有和栈空间一样特性的表(POP & PUSH),所以我们就叫他做堆栈。。。



以上我们讲了什么是《抽象表》,《表》《队列》《堆栈》

接下来我以《表》《队列》《堆栈》为中心来介绍他们的派生数据结构


首先我们,按照从这三种数据结构的Node在内存中存放的地址空间是否连续

可以分为:【顺序】和【链式】

因此可以派生出【顺序表,链式表】【顺序队列,链式队列】【顺序堆栈】【链式堆栈】

另外我们讲个题外话,如果你采用的实现方式是用【数组表示法】,那肯定是顺序的。。。。。我们讨论【顺序】还是【链式】是以【动态分配法(new)】为大前提的


下面提一个比较特殊的概念  【循环】

所谓的【循环】是指在抽象表的【操作】过程中对首尾进行取余数(%)处理,如果大于表的总容量就让输入端指针回到物理地址的首部

这样做的目的是为了让用户感觉表在逻辑上时首尾相连的“环形队列”

我们应该把循环拆改来理解:遵循一定规则的环形结构  叫【循环】。。。。(自己编,呵呵呵呵呵呵····)

···

下面再提一个新的概念 【双端】

其实我不想提的,因为他很少用到。他是一个灾难性的概念

比如说,我们把一段可以进行输入和输出的脚堆栈,那么两端都可以输入和输出的叫什么?叫【双端】。。(我很想叫他【畸形】)

就好比,一个头乌龟头叫乌龟,两个乌龟头接在一个身体上叫什么?这分明是怪物···但是在数据结构里面就有这么个东西叫【双端】

有时候我们还会让抽象表一端具有栈功能,另一端只能输出或者输入·····或者两端都只能输入········所以除非需求逼你走上绝路,否则不建议用它,,,,,

下面提一个不得不说的事情,就是【链表】的单向性和双向性

假如链表的每个节点都有整张表其他节点的地址,那就和普通的顺序表没区别了。。。但是这样代价很大····所以这种情况我们不做介绍

第一种情况,每个节点只存放下一个节点的地址:我们叫他单向链表,因为我们只能单方向的访问(遍历)链表

第二种情况,每个节点仅存放上一个节点和下一个节点的地址:我们叫他双向链表,我们可以两个方向访问(遍历)链表



本文没配图,不好意思。。。因为觉得这对牛逼的你和爱问的你不成问题····(其实是因为传图到论坛是很辛苦的一件事情,话题也是一件很辛苦的事情)


下篇文章讲解,《表》,《队列》,《堆栈》的使用情景介绍



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值