数据结构与算法(3)----->队列和栈

1. 栈和队列的基本性质

  1. 栈是先进后出;(像是子弹夹,后进先打出)
  2. 队列是先进先出;(像是平时排队买冰淇淋,按顺序轮流)
  3. 栈和队列在实现的结构上可以有数组和链表两种形式;

    (1)数组结构实现容易;

    (2)用链表结构较为复杂,因为牵扯很多的指针操作;

1.1  栈结构的基本操作

(1)pop操作;(弹出)

(2)top或peek操作;

(3)push操作;(压栈)

(4)size操作;

1.2  队列的基本操作

(1)队列的基本操作与栈操作不同的是,push操作作为在队头加入元素;而pop操作是从队列尾部弹出一个元素;

(2)队列和栈的基本操作,都是时间复杂度为O(1)的操作;

  特殊:

  1. 双端队列结构:为首尾都可以压入和弹出元素;
  2. 优先级队列结构:会根据元素的优先级值,决定元素的弹出顺序;其本质是一个堆结构,并不是线性结构;

原文地址:https://www.cnblogs.com/Mairr/p/8362692.html

时间: 2024-09-28 18:04:14

数据结构与算法(3)----->队列和栈的相关文章

数据结构与算法之队列、栈

除了数组.链表,线性的数据结构中还有很重要的几种结构:队列.栈. 队列,一种先进先出的数据结构(FIFO),其实队列可以看成是一个两个口的管道,从一个口进,另一个口出,先进去的必定得在另一个口先出去,否则后面的都出不去:栈,一种后进先出的数据结构(LIFO),栈更像是只有一个口的管道,只有一个开口可以进出,先进去的在底部,所以必须得让后进去的先出去,它才能出去. 实现队列和栈可以用顺序存储结构,也可以用链式存储结构.这里采用的是链表来实现,同时还有用两个栈实现一个队列和用两个队列实现一个栈的算法

数据结构与算法系列研究二——栈和队列

栈和队列的相关问题分析 一.栈和队列定义 栈和队列是两种重要的数据结构.从结构特性角度看,栈和队列也是线性表,其特殊性在于它们的基本操作是线性表的子集,是操作受限的线性表,可称为限定性的数据结构:从数据类型角度看,其操作规则与线性表大不相同,是完全不同于线性表的抽象数据类型.                    图1 栈的结构                                                 图2 队列的结构   1.1.栈是限定在表的一端进行插入和删除操作的线性

【Java数据结构学习笔记之二】Java数据结构与算法之队列(Queue)实现

  本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型   队列同样是一种特殊的线性表,其插入和删除的操作分别在表的两端进行,队列的特点就是先进先出(First In First Out).我们把向队列中插入元素的过程称为入队(Enqueue),删除元素的过程称为出队(Dequeue)并把允许入队的一端称为队尾,允许出的的一端称为队头,没有任何元素的队列

数据结构与算法——循环队列

今天总结循环队列. 什么是队列? 队列跟栈差不多,也是一种操作受限的线性表,只允许在线性表的一端进行插入操作,在另一端进行删除操作.插入的一端称为队尾,删除的一端称为队头,插入操作称为入队,而删除操作称作出出队,不含任何数据元素的队称为空队.队列也有两种实现方式,一种就是顺序存储,用数组实现,另一种是采用链表形式.今天总结顺序存储的循环队列. 什么是循环队列? 循环队列就是,当队尾指针移动到数组末尾时,下次再有元素入队时,可以将队尾指针重新移到数组前面没有元素的位置. 为什么要使用循环队列? 循

《数据结构与算法JavaScript描述》- 栈

栈是和列表类似的一种数据结构,是一种特殊的列表,可解决计算机世界里很多问题 栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快 栈内的元素只能通过列表的一端访问,这一端称为栈顶 栈是一种后入先出(LIFO,last-in-first-out)的数据结构 对栈的两种主要操作是将一个元素压栈和弹栈,另一个常用操作是预览栈顶的元素 实现一个栈当务之急是决定存储数据的底层数据结构,这里采用数组 function Stack() { this.dataStore = []; // 存

【NOIP数据结构专项】单调队列单调栈

[洛谷P1901 ]发射站 http://www.luogu.org/problem/show?pid=1901 题目描述 某地有 N 个能量发射站排成一行,每个发射站 i 都有不相同的高度 Hi,并能向两边(当 然两端的只能向一边)同时发射能量值为 Vi 的能量,并且发出的能量只被两边最近的且比 它高的发射站接收. 显然,每个发射站发来的能量有可能被 0 或 1 或 2 个其他发射站所接受,特别是为了安 全,每个发射站接收到的能量总和是我们很关心的问题.由于数据很多,现只需要你帮忙计 算出接收

数据结构和算法-007 队列

堆栈,另一个经典的数据结构.先进先出. 直接看代码吧,实现以下功能: 创建队列 插入值 取出值 值查看当前值 顺序插入 public class TheQueue {          private String[] queueArray;          private int queueSize;          private int front, rear, numberOfItems =0;          TheQueue(int size){                

Java数据结构和算法(五)——队列

队列,queqe,就是现实生活中的排队. 1.简单队列: public class Queqe { private int array[]; private int front; private int end; private int number; private int max; private Queqe(int maxsize){ array = new int[maxsize]; max = maxsize; front = 0; end = 0; number = 0; } pri

数据结构与算法——链队列

总结链队列 什么是链队? 队列的链式存储结构称为链队列.链队也有两个指针,队头指针和队尾指针,这样队头删除和队尾插入操作就会很方便,链式队列一般像单链表一样,有一个头结点. 图示: 具体实现: <span style="font-family:Courier New;font-size:14px;">#include <iostream> using namespace std; template <class T> struct Node { T

Java数据结构与算法(4) - 队列(Queue和PriorityQ)

队列: 先进先出(FIFO). 优先级队列: 在优先级队列中,数据项按照关键字的值有序,关键字最小的数据项总在对头,数据项插入的时候会按照顺序插入到合适的位置以确保队列的顺序,从后往前将小于插入项的数据项后移.在图的最小生成树算法中应用优先级队列. 示例代码: package chap04.Queue; class Queue { private int maxSize; private long[] queArray; private int front; private int rear;