博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构03-栈和队列
阅读量:7227 次
发布时间:2019-06-29

本文共 1380 字,大约阅读时间需要 4 分钟。

1.概述

    我们知道,程序就是用来处理数据的。对于每一件现实中的问题,我们也是将其抽象成数据+对数据的操作。所以数据的格式决定着我们操作他们的形式。

    我们可以想象在超市中排队结账的情景,很多人排成一条长队,而新来的人要排在队的后面,结账的人一定是在队列最前面的人。(不考虑没有素质的行为)

    我们还可以想象在我们将一件件衣服叠好,放在衣柜或者箱子里面的过程,最上面的一件,一定是最后放进去的,最下面的一定是第一件放进去的。。

    同理,在进算计中也有模拟这些情况的数据结构,我们称之为队列和栈。

2.基本概念

    2.1 栈 

        栈是一种先进后出的数据结构,他要求只能对一端进行操作,每次只能操作处于逻辑最前面的元素。

        例如我们使用数组的时候,栈要求我们只能操作最后一个进入数组的元素(元素按顺序摆放,没有空隙)。

    2.2 队列

        队列是一种先进先出的数据结构,他要求同时对两端进行操作,但是要求逻辑头只能进行元素出队列(删除)操作;逻辑尾只能进行入队列(元素添加)操作,就好比排队一样。

    2.3 栈与队列的区别

        首先,栈与队列都是线性结构(使用数组或者顺序表实现),栈的特点是先进入的元素后出来,利用这种结构可以记录层级关系,例如函数调用关系,嵌套的层级关系,表达式的计算等。

        队列的特点是先进先出,利用这种结构可以记录顺序,例如消息的排序,记录操作的先后顺序等。

3.栈的实现

    3.1 数组实现

        栈的数组实现非常简单,首先声明一个数组,然后再定义一个变量P用来保存当前操作位置,每次元素入栈就在P指定的位置入该元素,然后向前移动P的位置;每次出栈将当前P指向的元素删除,然后再向后移动

        P的位置。这样就保证了只对数组的一端进行操作,形成了栈结构。

    3.2 链表实现

         与数组类似,每次有新元素加入,就给链表的尾部加入一个新的节点;每次有元素出栈,就删除链表最后一个节点。

4.队列的实现

    4.1 链表实现

          链表实现的队列比较简单,每次有新的元素加入,就在链表的尾部加入一个新节点;每次有元素出队列,就删除链表的第一个节点。

    4.2 数组实现

          队列的数组实现比较麻烦,他要求有两个变量 p、q分别表示当前队列的头和尾,每次有新元素,就放入队尾指针的位置,然后队尾指针向后移动;

          每次要出队列的时候就将队头指针的数据删除,然后队头指针向后移动。 可以发现,当进行一定次数的操作之后,由于队头指针向后移动,将导致整个数组资源浪费(即队头指针跑到了队尾),为了

          解决这个问题,循环队列就产生了

    4.3 循环队列

          循环队列就是逻辑上将数组头尾相接,形成一个圈,当队尾到达数组尾部的时候,由于之前出队列导致数组的头部并没有元素,这是我们可以将队尾元素存在这里,形成一个环,避免了资源浪费。

        

5. 推荐阅读:

            

 

转载于:https://www.cnblogs.com/xiaobai1202/p/10856154.html

你可能感兴趣的文章
通过Git WebHooks+脚本实现自动更新发布代码之shell脚本
查看>>
对象实例化、字符串的使用方法
查看>>
keepalived基于LVS实现高可用,实现web服务的高可用
查看>>
80端口被Microsoft-HTTPAPI/2.0占用的解决办法
查看>>
无法抗拒Minecraft给予超高的自由度和探索-微访谈
查看>>
数据结构之串
查看>>
我的友情链接
查看>>
lvs+keepalived+nginx+tomcat高可用高性能集群部署
查看>>
实验:搭建主DNS服务器
查看>>
org.gjt.mm.mysql.Driver与com.mysql.jdbc.Driver区别
查看>>
部署exchange2010三合一:之五:功能测试
查看>>
nginx编译安装参数
查看>>
代码托管
查看>>
第一次给ThinkPHP5核心框架提pull request的完整过程
查看>>
U-Mail邮件系统何以誉为信息整合中转枢纽
查看>>
强大的vim配置文件,让编程更随意
查看>>
崛起于Springboot2.X之配置文件详解(10)
查看>>
定时执行程序-Quartz简单实例
查看>>
【CF 应用开发大赛】MyfCMS系统
查看>>
windows下kangle虚拟主机-架设java空间的教程及心得
查看>>