浅谈栈、队列

所谓栈和队列其本质都是一种存储信息的方法,最主要的差别就是两者的存取方式不同,栈相当于是一个一端开口一端封闭的空心玻璃柱,每存入一个数据就是扔进一个与管口等粗的球,取出数据时只能取最上头的,也就是最后一个放进去的,并且当管中无球时,无法取数据;相对而言,队列相当于是一个两端开口的空心玻璃柱,每存入一个数据,就从后端插入一个与管口等粗的球,取数据时只能从前端取不能从后段取,同样当其中无球时无法取。

从上述介绍中可以发现两者各有优势,但队列有一个显著问题,但插入取出次数多时,可能仅有几个数据但存储却达到几百个位置,因此我们考虑到在已知同时存储的数据不多的时候,可以用环形的数组进行存储。

进出栈代码如下:

void ruzhan(int x) // 入栈时传入入栈数据
{
    zhan[tot]=x;
    tot=tot+1;
}
void chuzhan(int x) // 出栈时传入出栈几个
{
    for(int i=0;i<x;i++)
    {
        zhan[tot-1]=0;
        tot=tot-1;
    }
}
全局变量:
zhan[] // 指存栈用的数组
tot // 用于表示当前存储的位置

进出队列代码如下:

void rudulie(int x) // 入队列时传入入队列数据
{
    duilie[end]=x;
    end=end+1;
}
void chuduilie(int x) // 出队列时传入出队列几个
{
    for(int i=0;i<x;i++)
    {
        duilie[begin]=0;
        begin=begin+1;
    }
}
全局变量:
duilie[] // 指存队列用的数组
begin // 用于表示当前存储的开头位置
end // 用于表示当前存储的结束位置

环状队列代码如下:

void rudulie(int x) // 入队列时传入入队列数据
{
    duilie[end]=x;
    end=end+1;
    if(end>=max)
    {
        end=end-max;
    }
}
void chuduilie(int x) // 出队列时传入出队列几个
{
    for(int i=0;i<x;i++)
    {
        duilie[begin]=0;
        begin=begin+1;
    }
    if(begin>=max)
    {
        begin=begin-max;
    }
}
全局变量:
duilie[] // 指存队列用的数组
begin // 用于表示当前存储的开头位置
end // 用于表示当前存储的结束位置
max // 用于表示数组的总格数

感谢各位观看我的博客,希望能对大家有所帮助。

时间: 2024-11-03 21:12:45

浅谈栈、队列的相关文章

浅谈栈帧(二)

接上一篇:浅谈栈帧(一) 上一篇我们简单说了一下关于堆栈与栈帧调用函数是如何调用的,堆栈中的数据是如何存储在内存中的,用了几个简单的实例去观察分析他. 这篇,我们从根本来思考一下堆栈这种东西: 其实在计算机的早期,电脑的内存是用是十分老实的,没错就是老实.他没有进行一些内存空间上的保护. 大家想想,在当内存空间不存在保护时,我们利用一个函数不断去改写计算机本身的内存,然后导致缓冲区溢出.这将使电脑崩溃,无法使用.因为内存不存在狡兔三窟,所以就老老实实的被病毒所平推了,就是是强拆,所以强拆是多么的

浅谈单调队列、单调栈

       初谈这个话题,相信许多人会有一种似有所悟,但又不敢确定的感觉.没错,这正是因为其中"单调"一词的存在,所谓单调是什么,学过函数的people都知道单调函数或者函数的单调性,直白一点说单调就是一直增或一直减.例如:1,3,5,9就是一个单调增数列,数列中不存在后一个数比前一个数小的现象.那么同样,在这里谈到的话题也有类似特点.        先说一下单调队列吧!      单调队列,就是一个符合单调性质的队列,它同时具有单调的性质以及队列的性质.他在编程中使用频率不高,但却

浅谈栈和队列

### 栈 栈模型 栈(stack)是限制对元素的插入(push)和删除(pop)只能在一个位置上进行的表,该位置是表的末端,叫做栈的栈顶(top). 栈的基本操作只有两种,压入栈(push)和弹出栈顶(pop),且只能作用于栈顶.(只有栈顶元素是可访问的 你可以把栈结构理解成一个底部封闭,顶部打开的桶.最先进去的元素一定是最后才能取出,最晚进去的元素一定是最先取出. 因此栈又叫做LIFO(后进先出,Last In First Out)表. 栈的优势 栈的操作是常数时间的,而且是以非常快的常数时

浅谈单调队列:死海不是海,单调队列不是队列

1.滑动窗口最值问题 给定一个长度为n的序列a1,a2,-ai,-,an,将一个长为k的滑动窗口自序列最左端向右边滑动.例如:初始时,窗口内的子序列为a1,a2,-,ak:当窗口向右滑动一位,此时窗口内的子序列变为a2,a3,-,ak+1. 我们要解决的问题是,给定长度为n的序列以及滑动窗口的大小k,求每一个滑动窗口内的最小值和最大值. 以长度为5的序列1, 3, 4, 5, 7滑动窗口k=3为例说明: 第1个滑动窗口(1, 3, 4)的最小值.最大值分别为1和4: 第2个滑动窗口(3, 4,

浅谈“栈和堆”

对于一些新人可能会不理解栈和堆是什么,在这里我简单介绍一下: 程序运行时,它的数据必须存储在内存中.一个数据项需要多大的内存.存储在什么地方.以及如何存储都依赖与该数据项的类型. 运行中的程序使用两个内存区域来存储数据:栈和堆. 首先,什么是“栈”? 栈是一个内存数组,是一个LIFO(last-in  first-out,后进先出)的数据结构.栈存储几种类型的数据: 某些类型变量的值 程序当前的执行环境 传递给方法的参数 栈的特征: 栈有如下几个普遍特征: 数据只能从栈的顶端插入和删除 把数据放

浅谈栈帧(一)

好久没有更新了,最近打算把近期所学的内容更新一下 今天说一说内存栈帧方面的吧=.= 关于栈帧:首先我们呢来了解一下它的基本概念. 1.堆栈:对于堆栈,其实就是我们程序进行执行,那么我们必须给它一块地盘,有了地基,才能够建筑出我们所需要的东西.没有地我们是无法去干任何事情的. 在计算机中,这个地盘其实就对于我们的内存空间.我们的程序其实就相当于施工队伍.我们所给出命令.然后对其进行指挥,完成我们布置的任务. (1)堆栈中有什么呢? 1.函数调用框架. 2.传递参数. 3.保存返回地址. 4.提供局

浅谈栈&amp;&amp;进制转换

利用stack实现进制转换 Stack.h #ifndef _STACK_H_ #define _STACK_H_ #include<iostream> #include<assert.h> using namespace std; typedef int ElemType; #define STACK_MAX_SIZE 100 #define HEX 2 typedef struct Stack { ElemType *base;//栈底指针 int top; //栈顶标识 in

浅谈消息队列的原理及优势

什么是消息队列这样的场景你一定不陌生:小王到M记点餐之后,服务员给了他一个号牌,并让他在柜台桌子前方等待叫号取餐.每个人都按照自己付款拿到的号牌顺序排队等叫号.即使店里人再多,也不会显得没有秩序.在上述场景中,柜台其实就充当了一个消息队列(Message Queue).小王等生产者把订餐的消息发送到柜台即消息队列里,又从其中取了餐即消费了消息,可以说这就是消息队列的一个完整走向--消息被发送到队列中,又成功被消费者消费."消息队列"是在消息的传输过程中保存消息的容器,队列的主要目的是提

浅谈消息队列及常见的消息中间件

消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段.它具有 低耦合.可靠投递.广播.流量控制.最终一致性 等一系列功能. 当前使用较多的 消息队列 有 RabbitMQ.RocketMQ.ActiveMQ.Kafka.ZeroMQ.MetaMQ 等,而部分 数据库 如 Redis.MySQL 以及 phxsql 也可实现消息队列的功能. 正文 1. 消息队列概述 消息队列 是指利用 高效可靠 的 消息传递机制 进行与平台无关的 数据交流,并基于 数据通信 来进行分布式系统的集成. 通过提供