数据结构详解之栈和队列
1. 栈Stack
1.1 栈简介
栈是先进后出的数据结构,限定只能在栈顶进行插入和删除操作。
1.2 相关函数
头文件
#include<stack>
常用操作
stack<int> S;//创建一个栈
S.pop();//弹出栈顶元素(删除栈顶元素)
S.top();//查看栈顶元素
S.push(a);//将a放在栈的顶部
s.empty();//返回栈是否为空
s.size();//返回栈的大小
2. 队列Queue
2.1 队列简介
队列与栈一样,是一种线性存储结构,它具有如下特点:
① 队列中的数据元素遵循“先进先出”(First In First Out)的原则,简称FIFO结构。
② 在队尾添加元素,在队头添加元素。
2.2 相关函数
头文件
#include<queue>
常用操作
getSize() 获取队列中有效元素的个数
isEmpty() 判断是否为空
clear() 清空队列
enqueue() 入队
dequeue() 出队
getFront() 获取队首元素
getRear() 获取队尾元素
2.3 队列类型
顺序队列:用数组实现顺序队列
规定:队头front、队尾rear、入队enQueue、出队deQueue
① 初始化时,数组的front和rear都指向0,表示队列为空
② 入队两个元素,front不变,rear+2;
③ 出队一次,front+1;
这样实现队列,有很大的问题:
每个空间域只能利用一次,即:当队首弹出以后,front向后移动,前面的空间无法利用,造成空间极度浪费。并且非常容易越界
循环队列:对已经申请的(数组)内存重复利用
① 问题
循环队列中,空队特征是front = rear, 队满时也会有front = rear; 判断条件将出现二义性
② 解决方案
a. 标志位法:加设标志位flag
-初始flag置为false;
-元素入队flag = true,元素出队flag = false
-在触发rear = front 的上一个操作决定了是空还是满。
队空: front = rear && flag=false,
队满: front = rear && flag=true
b. 计数器法:使用一个计数器记录队列中元素个数(即队列长度)
c. 空闲单元法:人为浪费一个单元,令队满特征为 front = (rear +1)%N(%取余)——最常用方法
下面重点讲空闲单元法:
① 循环队列必须给定最大值N
② 队列添加和删除的过程,即rear和front互相追赶,如果rear追到head说明队列满了,如果front追到rear说明队列为空
循环队列实现过程
① 添加元素时:(rear+1)%N
② 删除元素时:(front+1)%N
③ 当rear=front的时候,队列可能是满,也可能是空,需要区分判断
满:当队列添加元素到rear的下一个元素是head的时候,也就是转圈子要碰头了,我们就认为队列满了。(Q.rear+1)%N=Q.front
空:当队列删除元素到head=rear的时候,我们认为队列空了Q.rear==Q.front,不一定为0
队空条件:front=rear
队满条件:front= (rear +1)%N
队列长度:L=(N+rear-front)%N
数据结构详解之栈和队列相关推荐
- 万字长文的Redis五种数据结构详解(理论+实战),建议收藏。
本文脑图 前言 Redis是基于c语言编写的开源非关系型内存数据库,可以用作数据库.缓存.消息中间件,这么优秀的东西一定要一点一点的吃透它. 关于Redis的文章之前也写过三篇,阅读量和读者的反映都还 ...
- Python中的高级数据结构详解
这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint这些数据结构的用法,需要的朋友可以参考 ...
- [redis] 10 种数据结构详解
[redis] 10 种数据结构详解 简介 5种常见数据结构 string: 最常见的 string key value list: 双向链表 set: 集合- zset: 有序集合 hash: 类似 ...
- 数据结构详解——最大(小)左倾树
数据结构详解--最大(小)左倾树 文章目录 数据结构详解--最大(小)左倾树 最大(小)左倾树的定义及用途 操作最大HBLT 合并操作 插入操作和删除操作 初始化操作 Java语言实现的最大HBLT ...
- 高一凡-数据结构第3章-栈与队列
高一凡-数据结构第3章-栈与队列 3.1栈 3.1.1栈的数据结构 3.1.2接口 3.1.3实现 VS2015实例代码包: 3.1栈 3.1.1栈的数据结构 struct SqStack {SEle ...
- C语言数据结构-第三章栈和队列-电大同步进度
第三章栈和队列简介 从数据结构角度看,栈和队列是两种重要的线性结构,是一类操作受限制的特殊线性表,其特殊性在于限制插入和删除等运算的位置. 堆栈,限制用户只能在指定的一端插入和删除元素,因此具有后进先 ...
- 数据结构,堆和栈和队列的概念
数据结构,堆和栈和队列的概念 1 什么是数据结构 数据结构是计算机存储,组织数据的反复改.数据结构是指相互之间存在的一种或多种特定关系的数据元素集合. 2 数据结构的逻辑结构 1 集合结构,元素都是孤 ...
- redis数据结构详解之Hash(四)
原文:redis数据结构详解之Hash(四) 序言 Hash数据结构累似c#中的dictionary,大家对数组应该比较了解,数组是通过索引快速定位到指定元素的,无论是访问数组的第一个元素还是最后一个 ...
- Java实现自定义队列和树结构_Java数据结构之链表、栈、队列、树的实现方法示例...
本文实例讲述了java数据结构之链表.栈.队列.树的实现方法.分享给大家供大家参考,具体如下: 最近无意中翻到一本书,闲来无事写几行代码,实现几种常用的数据结构,以备后查. 一.线性表(链表) 1.节 ...
- (王道408考研数据结构)第三章栈和队列-第三节1:栈的应用之括号匹配问题和表达式问题(前缀、中缀和后缀)
前面我们就说过,栈是一种先进后出的线性表,这种先进后出的特性就决定了它在一类场合或问题中会经常被用到--递归.考研数据结构中所涉及的利用栈结构解决递归问题或者考察栈结构特性的问题主要有这么几类 括号匹 ...
最新文章
- iphone屏蔽系统更新_苹果iphone手机屏蔽烦人的系统更新弹窗提醒!
- 小圈子.大社交:利用圈子引爆流行
- Mule ESB-3.Build a webservice proxy
- 航飞原始影像外方位元素_【技术】无人机倾斜摄影建模技术在虚拟现实中的应用...
- Java学习笔记1.2.2 使用Java集成开发环境 - IntelliJ IDEA
- 催收 重新分案_贷后风险管理(催收)模型框架搭建
- YOLO利用kmeans聚类算法计算anchors box(原理介绍及代码)
- 解决fabric编译失败(make: *** [release/linux-amd64/bin/configtxgen] Error 1)
- linux内核之同步
- 二分查找递归解法(java)
- AGTF30 涡扇发动机说明
- linux:硬链接和软链接
- web服务器硬件软件配置选择
- 暴雪战网怎么修改服务器,战网昵称修改服务
- ssms连接mysql_SQL Server安装以及使用SSMS连接数据库
- gz rar zip 7z bz2 tgz压缩率比较,以及做一些简单的关于压缩包介绍
- Mysql数据库学习笔记[完结]
- 流域水库水闸和泵站无人值守系统
- c语言如何编程硬件,很多硬件开发都用C语言编程.PPT
- 用adblock来屏蔽百度热搜
热门文章
- GetLogicalDrives,GetLogicalDriveStrings,GetDri...
- 用php上传mysql表文件_php实现上传文件并存储到mysql数据库
- 一个 JS 库就能解决小程序跨页传递事件消息和数据
- Android的异步多线程消息处理机制
- abp vnext token失效时间设置
- 4.创建并调用自动控制器(api)
- css 居中50%,CSS中的translate(-50%,-50%)实现水平垂直居中效果
- python基础运用_python基础----python的使用(三)
- PHPExcel存放多个sheet报错: Invalid parameters passed.
- PHP中try、catch、finally的执行顺序