首页 > 编程语言 >【队列习题】如果允许在循环队列的两端都可以进行插入和删除操作,要求:写出循环队列的类型定义。分别写出从队尾删除和从队头插入的算法。

【队列习题】如果允许在循环队列的两端都可以进行插入和删除操作,要求:写出循环队列的类型定义。分别写出从队尾删除和从队头插入的算法。

时间:2024-12-15 17:29:12浏览次数:7  
标签:队尾 删除 队列 DeQueue 队头 DQElemType 插入 写出

题目

如果允许在循环队列的两端都可以进行插入和删除操作,要求:

  • 写出循环队列的类型定义。
  • 分别写出从队尾删除和从队头插入的算法。

分析

本题实际上是求双端队列的操作

约束

队头指针指向队头元素的上一个位置

队尾指针指向队尾元素


1. 双端队列的存储结构

跟队列的存储结构相等,只是队列名改变了

#define MAXSIZE 100
typedef struct {
	DQElemType *base;
	int rear,front;
}DeQueue;

2. 队头操作

void EnDeQueue(DeQueue &Q,DQElemType e){
	if(Q.rear == (Q.front - 1 + MAXSIZE) % MAXSIZE)
	{
		cout << "队列已满,无法插入"  << endl; 
	 } 
	 Q.base[Q.front] = e;          //队头指针指向前一个元素 
	 Q.front = (Q.front - 1 + MAXSIZE) % MAZSIZE;
}

3. 队尾删除

void DEDeQueue(DeQueue &Q,DQElemType &e){
	if(Q.rear == Q.fornt){
		cout << "队空,无法进行删除操作!"; 
	}
	e = Q.base[Q.rear];
	Q.rear = (Q.rear - 1 + MAXSIZE) % MAZSIZE;
} 

标签:队尾,删除,队列,DeQueue,队头,DQElemType,插入,写出
From: https://blog.csdn.net/2301_81182847/article/details/144485930

相关文章

  • 链式队列的实现及其应用
    目录一、概念二、链式队列的结构模型三、链式队列的实现3.1创建3.2入队3.3出队3.4判断是否为空3.5释放队列3.6清空队列四、应用一、概念链式队列,顾名思义,是基于链表实现的不同于普通链表,它在一端插入,另一端删除而由于链表中特殊的存在(头结点、尾结点),正好可以用......
  • delphi TFixedQueue 静态固定元素数队列,手工实现;
    unitzx.core.FixedQueue;interfaceusesSystem.SysUtils,System.Generics.Collections;typeTFixedQueue<T>=classprivate///<summary>///一个动态数组,用于存储队列元素,动态数组会自动管理内存///</summary>FItems:TArray<T>;......
  • 你认为写出什么样的html代码才是好代码呢?
    写出高质量的HTML代码是前端开发的重要一环。以下是一些关于编写优秀HTML代码的建议和最佳实践:1.语义化标签使用语义化标签:如<header>,<nav>,<main>,<section>,<article>,<footer>等,这些标签不仅使代码更具可读性,还有助于SEO和屏幕阅读器的使用。2.结构清晰保持结......
  • 使用任务队列TaskQueue和线程池ThreadPool技术实现自定义定时任务框架详解
    前言在桌面软件开发中,定时任务是一个常见的需求,比如定时清理日志、发送提醒邮件或执行数据备份等操作。在C#中有一个非常著名的定时任务处理库Hangfire,不过在我们深入了解Hangfire之前,我们可以手动开发一个定时任务案例,用以帮助我们理解Hangfire的核心原理。我们可以利用......
  • FreeRTOS-(2)-队列
    一、什么是队列?    队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任务间传递信息。    为什么不使用全局变量?    如果使用全局变量,任务1 修改了变量a,等待任务3处理,但任务3处理速度很慢,在......
  • 任务延时队列
    目录现有问题延时队列设计设计实现现有问题每次时钟节拍都需要扫描所有任务,比较耗时不易支持多个任务具有相同优先级延时队列设计将所有需要延时的任务单独放置在一个队列中,每次发生系统节拍时,只需扫描该队列。方式一:独立保存延时时间插入延时任务比较简单,快......
  • Python爬取数据插入mysql(简易记录)
    importmysql.connectorimportrequestsfromlxmlimporthtml#连接MySQL数据库db=mysql.connector.connect(host="?",user="?",password="?",database="?")cursor=db.cursor()company_url=......
  • 【Linux】:多线程(POSIX 信号量 、基于环形队列的生产消费者模型)
    ......
  • 开拓计划1 - 栈与队列
    开拓计划1-栈与队列栈与队列的概念及作用栈的概念Q:什么是栈?A:栈是一种后进先出(BIFO)的数据结构。栈的作用Q:栈有什么作用?A:只要满足栈的定义的场景都可以使用栈。eg:括号匹配,火车进站etc.计算后缀表达式时也会使用。队列的概念Q:什么是队列?A:队列是一种先进先......
  • ‌Bull是一个基于Redis的队列库,专为Node.js设计
    ‌Bull是一个基于Redis的队列库,专为Node.js设计,提供高性能和可靠的任务处理能力‌。它通过Redis作为后端存储,确保任务的持久性和高可用性。Bull的设计理念是简单、高效,同时具备强大的功能,能够满足各种复杂的任务调度需求‌12。Bull的主要功能‌高性能‌:Bull采用无轮询设计,极大......