线性表--队列-1

主要内容

  1. 队列基础练习题

一.队列基础练习题

1.用链式存储方式的队列进行删除操作时需要 ( D ).

A.仅修改头指针
B.仅修改尾指针
C.头尾指针都要修改
D.头尾指针可能都要修改

代码如下(示例):
队列用链式存储时,删除元素从表头删除,通常仅需修改头指针,
但若队列中仅有一个元素则尾指针也需要被修改,
当仅有一个元素时,删除后队列为空,需修改尾指针为 rear=front。

2.若以1,2,3,4作为双端队列的输入序列,则既不能由输入受限的双端队列得到,又不能由输出受限的双端队列得到的输出序列是( C )

A.1,2,3,4
B.4,1,3,2
C.4,2,3,1
D.4,2,1,3

代码如下(示例):
使用排除法。先看可由输入受限的双端队列产生的序列:
设右端输入受限,1,2,3,4 依次左入,则依次左出可得 4,3,2,1,排除 A;
右出、左出、右出、右出可得到4,1,3,2,排除 B;
再看可由输出受限的双端队列产生的序列:
设右端输出受限,1,2,3,4 依次左入、左入、右入、左入依次左出可得到 4,2,1,3,排除 D

3.现有队列Q与栈 S,初始时Q中的元素依次是 1,2.3,5,6(1在队头).S 为空。若仅允许下列3 种操作: (1) 出队并输出出队元素;(2)出队并将出队元素入栈:(3)出栈并输出出栈元素,则不能得到的输出序列是 ( C )。

A.1,2,5,6,4,3
B.2,3,4,5,6,1
C.3,4,5,6,1,2
D.6,5,4,3,2,1

代码如下(示例):
A 的操作顺序为11221133。
B 的操作顺序为2111113。
D 的操作顺序为22222133333。
对于 C: 首先输出3,说明 12 必须先依次入栈,而此后2肯定比1先输出,
因此无法得到 1,2的输出顺序

4.Q是一个队列,S 是一个空栈,实现将队列中的元素逆置的算法

代码如下(示例):
本题主要考查对队列和栈的特性与操作的理解。
由于对队列的一系列操作不可能将其中的元素逆置,而栈可以将入栈的元素逆序提取出来,
因此我们可以让队列中的元素逐个地出队列,入栈;全部入栈后再逐个出栈,入队列。void Inverser(Stack &S,Queue &Q){
//本算法实现将队列中的元素逆置while(!QueueEmpty(Q)){x=DeQueue(O);  //队列中全部元素依次出队Push(S,x);  //元素依次入栈}while(!StackEmpty(S)){PoP(S,x);  //栈中全部元素依次出栈EnQueue(Q,x);  //再入队}
}

5.利用两个栈 S1,S2来模拟一个队列,已知栈的4个运算定义如下:

Push(S,x);  //元素x入栈s
Pop(S,x);  //s出栈并将出栈的值赋给 x
StackEmpty(s);  //判断栈是否为空
StackOverflow(S);  //判断栈是否满

如何利用栈的运算来实现该队列的 3 个运算(形参由读者根据要求自己设计)?

Enqueue;  //将元素x入队
Dequeue;  //出队,并将出队元素存储在x中
QueueEmpty;  //判断队列是否
代码如下(示例):
利用两个栈S1和 s2来模拟一个队列,当需要向队列中插入一个元素时,
用S1 来存放已输入的元素,即 S1 执行入栈操作。
当需要出队时,则对 S2 执行出操作。
由于从栈中取出元素的顺序是原顺序的逆序,所以必须先将 S1 中的所有元素全部出栈并入栈到 S2 中,
再在 S2 中执行出栈操作,即可实现出队操作,
而在执行此操作前必须判断 S2 是否为空,否则会导致顺序混乱。当栈S1和s2都为空时队列为空。总结如下:
1)对S2的出找操作用做出队,若s2为空,则先将是s1中的所有元素送入s2
2)对 s1的入操作用作入队,若 S1 满,必须先保证s2为空,才能将s1中的元素全部插入S2中。

入队算法

入队算法int EnQueue(Stack Sl,Stack &S2,ElemType e){if(!stackOverflow(s1)){Push(S1,e);return 1;}if(StackOverflow(S1)&!StackEmpty(s2)){printf("队列满");return 0;}if(StackOveflow(S1)&sStackEmpty(S2)){while(!stackEmpty(S1)){Pop(S1.x);Push(S2,x);}}Push(s1,e);return 1;
}

出队算法

void DeQueue(Stack &S1,Stack &S2,ElemType &x){if(!StackEmpty(s2)){Pop(S2,x);}else if(StackEmpty(S1)){printf("队列为空");}else{while(!stackEmpty(S1)){Pop(S1,x);Push(S2,x);}Pop(S2,x);}
}

判断队列为空的算法:

int QueueEmpty(Stack Sl,Stack s2){if(StackEmpty(s1)&&StackEmpty(S2))return 1;elsereturn 0;
}

总结

以上是今天要讲的内容,练习了线性表–队列的相关习题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/155642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法分析与设计课后练习22

设W(5,7,10,12,15,18,20)和M35,使用过程SUMOFSUB找出W种使得和数等于M的全部子集并画出所生成的部分状态空间树

宝塔天翼云部署记录

1.不要用宝塔的LNMP自动化工具;去商店里面安装; 2.选择Centos 版本8.0以下的,因为8以上不维护了。 3.记得开放端口,安全组下面。 4.安装FTP多次失败,虽然有些SB但是可以修复注意。 永别。 天翼云服务器80、443等特…

国产压力测试工具的主要作用

国产压力测试工具可以帮助软件开发和维护团队对系统进行全面的性能测试,以评估系统在高负载下的性能表现。以下是国产压力测试工具的主要作用: 性能评估:国产压力测试工具可以模拟多用户同时对系统进行访问和操作,通过对系统的响应…

Vite - 静态资源处理 - json文件导入

直接就说明白了 vite 中对json 文件直接当作一个模块来解析。 可以直接导入使用! 可以直接导入使用! 可以直接导入使用!json文件中的key,直接被作为一个属性,可以单独被导入。 因此,导入json文件有两种方式…

金山云2023年Q3财报:持续向好!

11月21日,金山云公布了2023年第三季度业绩。 财报显示,金山云Q3营收16.3亿元,调整后毛利率达12.1%再创历史新高,调整后毛利额同比上涨57.5%。今年第三季度,公有云实现收入10.2亿元,毛利率达到4.7%&#xf…

反序列化漏洞介绍

反序列化漏洞 序列化和反序列化本身不存在漏洞,之所以会有反序列化漏洞,是因为开发者在编写时,加入了一些恶意的代码 PHP反序列化漏洞是一种安全漏洞,它允许攻击者利用未经验证的用户输入来执行恶意代码。这种漏洞通常出现在PHP…

OpenAI GPT-4 Turbo发布:开创AI新时代

🎥 屿小夏 : 个人主页 🔥个人专栏 : IT杂谈 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. GPT-4 Turbo的突破1.1上下文长度和控制手段的加强:1.2多模态支持&#xff1a…

UE必学系列(基础篇完结)

导语: UE必须系列基础篇完结,敬请期待进阶篇 基础篇文章:在掌握了UE4基础操作,并且能上手做一些项目之后,对UE4知识进行更完善的知识体系学习。主要是把学习视频链接汇总,主要学习思路是 优先官方视频和官…

Linux 网络:PMTUD 简介

文章目录 1. 前言2. Path MTU Discovery(PMTUD) 协议2.1 PMTUD 发现最小 MTU 的过程 3. Linux 的 PMTUD 简析3.1 创建 socket 时初始化 PMTUD 模式3.2 数据发送时 PMTUD 相关处理3.2.1 源头主机发送过程中 PMTUD 处理3.2.2 转发过程中 PMTUD 处理 4. PMTUD 观察5. 参考链接 1. …

vue路由传参的详解1.命名路由的传参和取出2.query传参和取出3.meta传参和取出4.其他方式5.注意点 代码和注释

Vue是一款流行的前端框架,其路由功能可以帮助我们实现单页应用(SPA)的跳转和页面切换。在实际开发中,我们会遇到需要在路由之间传递参数的情况,本篇博客将详细介绍Vue路由传参和取出参数的几种方式。 目录 1. 命名路由…

使用Python实现几种底层技术的数据结构

使用Python实现几种底层技术的数据结构 数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这…

千字文||无聊又数了一下千字文字数

千字文的字数去除标点符号真的整整一千个不多的不少 该文章无技术含量,仅三字经原文,学技术的同学可以止步了 千字文(原文) 【作者】周兴嗣 【朝代】南北朝 天地玄黄,宇宙洪荒。 日月盈昃,辰宿列张。 寒来…

抗混叠在微小目标检测中的重要性

文章目录 摘要1、简介2、相关研究2.1、微小物体检测2.2. 抗锯齿过滤器3、方法3.1. Wavelet Pooling3.2 一致顺序的Wavelet Pooling的WaveCNet3.3、Bottom-Heavy Backbone4、实验4.1、预训练数据集4.2、微小目标检测数据集4.3、抗混叠方法的选择及应用顺序4.4、小波的选择4.5、T…

Python 进程和线程详解(multiprocessing、threading)

文章目录 1 概述1.1 进程 VS 线程1.2 优缺点 2 进程2.1 三个步骤2.2 多进程2.3 带参数2.3.1 元组参数 args2.3.2 字典参数 kwargs 2.4 获取进程编号2.5 设置进程守护 3 线程3.1 三个步骤3.2 多线程3.3 带参数2.3.1 元组参数 args2.3.2 字典参数 kwargs 2.4 获取线程编号2.5 设置…

UE4基础篇十七:分析性能

一、性能瓶颈定位 原文地址:小能猫吃牙膏:UE4 性能 - (一)瓶颈定位 P.S. 对于某个具体问题,我个人偏向于遵循 WHY → WHAT → HOW 的思考方法(重要性逐级递减) 加以理解。因为如果找不到做某件事情的意义(WHY)所在,或是对这件事情本身的定义(WHAT)都模棱两可,那么即便经…

【经验之谈·高频PCB电路设计常见的66个问题】

文章目录 1、如何选择PCB 板材?2、如何避免高频干扰?3、在高速设计中,如何解决信号的完整性问题?4、差分布线方式是如何实现的?5、对于只有一个输出端的时钟信号线,如何实现差分布线?6、接收端差…

特斯拉开启“涨涨涨”模式,一个月宣布涨价4次

KlipC报道:11月21日特斯拉中国官网上调了Model Y长续航全轮驱动版售价,一个月内,特斯拉进行第四次价格调整。 对此特斯拉将近期涨价的原因解释为 这次涨价相对于今年8月份的降价实际上属于‘价格回调’,一方面是因为特斯拉销量好&…

docker部署jdk21的镜像

docker Docker是一种开放源代码软件,可以帮助开发人员更轻松地创建、部署和运行应用程序。它是一种容器化技术,可以将应用程序及其依赖项打包在一个容器中,从而使应用程序更加便携和可移植。Docker将操作系统、应用程序和硬件虚拟化进行了彻底…

LeetCode算法心得——爬楼梯(记忆化搜索)

大家好,我是晴天学长,第二个记忆化搜索练习,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1)爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或…

批量插入数据与分页的原理及推导

批量插入数据 【1】准备数据 class Book(models.Model):title models.CharField(max_length32) 【2】一条一条插入 后端 def ab_many(request):# (1)先给Book表插入一万条数据for i in range(1000):models.Book.objects.create(titlef第{i}本书)# (2)将所有数据查询到并展…