顺序队列

顺序队列/链式队列         队列是另一种限定性的线性表,他只允许在表的一端插入元素,而在表的另一端删除元素,具有“先进先出”的特点。在队列中,允许插入的一端称为队尾,允许删除的一端称为队首。        与线性表相似,队列也有两种存储结构:顺序队列和链式队列。一,顺序队列        顺序队列使用顺序表来实现的,即队列中的元素均存放在一片连续的内存空间中。通过该片内存的地址对队列中元素进行访问。之前是用数... 阅读详情
#include <stdio.h>
#include "SqQueue.h"

int InitQueue (Queue *q)//创建队列
{
	if(q == NULL)
	{
		errno = ERROR;
		return FALSE;
	}
	q->front = 0;
	q->rear  = 0;//初始队列没有元素
}

int QueueEmpty ( SeqQueue *q )//判断队列是否为空
{
	if(q == NULL)
	{
		errno = ERROR;
		return FALSE;
	}
	return q->rear == q->front;
}	

int QueueFull ( SeqQueue *q )//判断队列是否满
{
	if(q == NULL)
	{
		errno = ERROR;
		return FALSE;
	}
	return (q->rear+1)%SIZE == q->front;
}

int EnQueue ( SeqQueue *Q, QueueData x )//进队列
{
	if(q == NULL)
	{
		errno=ERROR;
		return FALSE;
	}
	if(QueueFull(q))
	{
		errno = FULL_QUEUE;
		return FALSE;
	}
	q->rear = (q->rear + 1)%SIZE;
	q->data[q->rear] = x;
	
	return TRUE;
}

int DeQueue (Queue *q, QueueData *x)//出队列
{
	if (q == NULL)
	{
		errno = ERROR;
		return FALSE;
	}
	
	if (QueueEmpty(q))
	{
		errno = EMPTY_QUEUE;
		return FALSE;
	}
	q->front = (q->front + 1) % SIZE;
	*x = q->data[q->front];
	
	return TRUE;
}

int GetFront (Queue *q, QueueData *x)//取的队头元素
{
	if (q == NULL)
	{
		errno = ERROR;
		return FALSE;
	}
	
	if (QueueEmpty(q))
	{
		errno = EMPTY_QUEUE;
		return FALSE;
	}
	int index = (q->front + 1) % SIZE;
	*x = q->data[index];
	
	return TRUE;
}

顺序队列是队列的顺序存储结构,顺序队列实际上是运算受限的顺序表。和顺序表一样,顺序队列用一个向量空间来存放当前队列中的元素。由于队列的队头和队尾的位置是变化的,设置两个指针front和rear分别指示队头元素和队尾元素在向量空间中的位置,它们的初值在队列初始化时均应设置为0。

顺序队列通常采用一维数组进行存储。其中,连续的存储单元依次存放队列中的元素。同时,使用两个指针分别表示数组中存放的第一个元素和最后一个元素的位置。其中,指向第一个元素的指针被称为队头指针front,指向最后一个元素的位置的指针被称为队尾指针rear。

入队时:将新元素插入rear所指的位置,然后将rear加1。出队时:删去front所指的元素,然后将front加1并返回被删元素。

(1)当头尾指针相等时,队列为空。(2)在非空队列里,队头指针始终指向队头元素,队尾指针始终指向队尾元素的下一位置。

C语言实现顺序队列 C语言详解顺序队列 阅读详情

相关推荐

队列,顺序队列,循环队列,链式队列

为了解决“假溢出”现象,使得队列的存储空间得到充分利用,一个巧妙的方法就是将顺序队列的数组看成一个头尾相接的循环结构。队列的头尾相接的顺序存储结构称为循环队列。题:当循环对列为空或满时,都是队尾指针等于队头指针,即rear==front。当rear==front时,该是判满还是判空呢?解决方案:方案一:设置一个计数器,开始时计数器设为0,新元素入队时,计数器加1,元素出队,计数器减1。当计数器==MAXSIZE时,队满;计数器==0时,队空。

qq_43389859的博客 1285

队列实现对有n个元素的数组循环左移k位

基本思想:利用队列求解将使问题简单化,将数组的0-(k-1)存入队列,然后将数组k-(n-1)依次左移k位,然后顺序出列,具体算法如下: #include #include #define MAXSIZE 100 typedef struct { int data[MAXSIZE]; int front,rear; }SeqQueue,*PSeqQueue; PSeqQueue Init_

杨哥的专栏 3823

STM32串口DMA双缓冲机制实战:提升数据传输效率的终极方案

本文深入解析了STM32串口DMA双缓冲机制的核心原理与实战配置。通过对比传统中断方式,阐述了双缓冲如何实现数据接收与处理的“无缝接力”,从而在工业传感器数据采集等高负载场景下,将CPU占用率降至极低水平并彻底避免数据丢失。文章提供了基于标准外设库的详细配置步骤、中断处理逻辑及性能实测数据,是提升嵌入式系统串口通信效率和可靠性的终极方案。

weixin_29192365的博客 80

c语言 队列存储,队列的顺序存储与链式存储c语言实现

一. 队列1.队列定义:只允许在表的一端进行插入,表的另一端进行删除操作的线性表。2.循环队列:把存储队列的顺序队列在逻辑上视为一个环。循环队列状态:初始时:Q.front=Q.rear=0front指针移动:Q.front=(Q.front+1)%MaxSizerear指针移动:Q.rear=(Q.rear+1)%MaxSize队列长度:(Q.rear+MaxSize-Q.front)%MaxS...

weixin_39631755的博客 890

避开这些坑!STM32H750 IAP升级实战:从Bootloader设计到APP接收的完整避坑指南

本文深入探讨STM32H750 IAP升级的完整避坑指南,从Bootloader设计到APP接收的全流程实践。特别针对QSPI Flash运行限制、SRAM跳转机制和固件校验等核心问题,提供工业级解决方案,帮助开发者提升升级成功率和系统稳定性。

weixin_30471561的博客 275

激光定位算法竞技场:hdl_localization与Cartographer/AMCL的横向技术解剖

本文深入对比了hdl_localization、Cartographer和AMCL三种激光定位算法的技术原理与性能表现。通过UKF-NDT融合、图优化和粒子滤波等核心技术,分析了各算法在结构化环境、动态环境和大尺度场景下的适应性。实验数据表明,Cartographer在全局一致性上表现最优,而AMCL在动态环境中更具鲁棒性。文章还提供了算法选型指南和参数调优技巧,为工程实践提供参考。

weixin_29062865的博客 367

数据结构-顺序队列(C语言)

队列:插入数据只在队尾进行,删除数据只在队头进行。 顺序队列操作会出现 假溢出(tail指向队列最后,进行入队操作时,即使前面有空位置也显示队列已满)

Yeziquanquan的专栏 4525

量化交易新手入门:从零开始搭建你的第一个Python交易策略(附完整代码)

本文为量化交易新手提供从零开始搭建Python双均线策略的完整指南,涵盖环境配置、数据获取、策略实现及风险管理等关键步骤。通过详细的代码示例和实践建议,帮助读者快速掌握量化交易的核心技术,并避免常见陷阱。文章特别强调Python在量化交易中的技术革新优势,适合希望进入金融科技领域的初学者。

weixin_26905487的博客 444

数据结构总结【栈和队列】

/* 第三章:栈和队列---顺序栈*/ #include<stdio.h> #include<bits/stdc++.h> using namespace std; #define ElementType int typedef struct{ ElementType *array; // 存放数据元素 int top; // 栈顶指针 int capacity; // 栈的容量 }SeqStack; // 1. 一般顺序栈的创建 SeqStack *createSta

程序员战胜 660

OpenHarmony电源管理驱动架构剖析:HDI框架下的低功耗实现

鸿蒙电源管理驱动模块是OpenHarmony操作系统中负责设备电源状态管理的核心组件。该模块基于HDI(Hardware Device Interface)框架实现,提供了完整的电源管理功能,包括系统休眠/唤醒、运行锁管理、休眠模式控制等核心功能。public:// 主要接口函数// 运行锁管理private:// 内部辅助函数// 成员变量public:// 运行锁控制接口// 回调管理private:// 内部辅助函数。

m0_67505153的博客 209

InVEST模型 | HAbitat quality模块计算生境质量

 本文详细介绍使用InVEST模型中HAbitat quality模块计算生境质量,包含各个参数的含义、所需数据、数据处理以及需要各个参数注意的地方等过程。

地理空间科学的博客 1万+

数据结构---------循环队列与链式队列

1.循环队列有几个初学者需要注意的地方: (1)如何判断循环队列为空或者已满? 其实在程序设计的过程中是有很多方法来处理同一个问题的,就看编写代码者如何去处理。一般情况下,有两种方法来处理循环队列的这个问题: a.在循环队列的定义过程中,用一个变量来记录当前队列中元素的个数; b.利用 (Q->front + 1)%MaxSize == Q->rear来判断是否已满;利用Q->front

bobopeng 1006

fanuc机器人KAREL中 函数的应用

本次课程讲解编程的思路。很多的同学都玩过积木,一个一个的模块逐渐累积起来,通过彼此之间的相互联系,最终形成一个完整的整体。其实编程也是这样。 将一个对象根据其特点进行模块化拆分,尤其是一些特点非常相似的内容,将其变成一个模块。然后通过传递参数,实现不同的功能,这就是模块化编程。

haier123888的博客 2744

队列——顺序队列和链式队列

队列是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表,满足**先进先出(First In First Out, FIFO)**的操作原则。队列同样是在表的基础上增加了约束。因此队列满足表的一些特征,比如内存管理等,同时也可以如图。

2401_88036229的博客 1384

configure: error: no acceptable C compiler found in $PATH解决方案

本文主要介绍了configure: error: no acceptable C compiler found in $PATH解决方案,希望能对使用Linux的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 4万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

队列文档之顺序队列

队列的顺序实现指分配一块连续的存储单元存放队列中的元素,并附设两个指针:队头指针和队尾指针。

二木成林 3014

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

顺序栈、链栈、顺序队列、链队列区别

1.顺序栈 顺序栈的主要特征是用一个数组实现栈的存储,top指针确定栈顶元素位置 定义形式如下:   #define Max 100 template &lt;class T&gt; class SeqStack{ public: SeqStack():top(-1){} void Push(T x); T getTop(); ...

qq1169091731的博客 6392

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

顺序队列和链式队列

队列采用顺序存储结构来表示,即在内存中用一组地址连续的存储单元依次存放从队头到队尾的数据元素。 有一点要注意,当队尾rear=MAX_SIZE时候,队列并不一定占满。 判断队列为空的条件front == rear 判断队列满的条件为 (rear + 1) % MAX_SIZE == front 进队操作:rear = (rear + 1) % MAX_SIZE 出队操作:front = (front + 1) % MAX_SIZE 在这里插入代码片 #include<stdio.h> #inc

qq_26646107的博客 2132

java实现顺序队列

使用java语言实现顺序队列

初心不忘、始终方得 2906

队列之顺序队列详解(C语言版)

本篇文章详细的介绍了数据结构队列中的顺序队列,并用C语言对其常用操作进行了实现。

qq_44075108的博客 8260

java中链式队列和顺序队列

Queue接口继承自Collection接口,提供了一组用于操作队列的方法,而Deque接口则继承自Queue接口,提供了额外的双端队列操作方法。总结: 无论是链式队列还是顺序队列,它们都实现了Queue接口,因此可以使用相同的方法来进行入队和出队操作。而当我们需要在队列两端进行操作(既能在队列头部添加和移除元素,又能在队列尾部添加和移除元素)时,可以选择使用Deque接口。因此,可以使用LinkedList实现链式队列(Queue)和双端队列(Deque),根据需要选择适当的方法来操作队列中的元素。

weixin_42888110的博客 981

顺序队列的实现

顺序队列和循环队列是基于数组实现的两种队列结构。顺序队列存在"假溢出"问题,即队首空间无法复用导致空间浪费;循环队列通过逻辑首尾相连解决了这一问题,显著提高了空间利用率。两者主要区别在于:顺序队列指针单向移动,空间利用率低;循环队列指针可循环移动,能充分利用所有空间。循环队列是对顺序队列的优化改进,采用取模运算实现环形结构,并通过预留空位等方法区分队空队满状态。实际应用中,循环队列因其高效性更为常用。

weixin_45854148的博客 1097

队列---基本概念、顺序队列

一、基本概念队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。队列基本操作:InitQueue()   ——初始化队列 EnQueue() ——进队列 DeQueue() ——出队列 IsQueueEmpty()

爱橙子的OK绷的专栏 6408

顺序队列为空的条件_C语言实现顺序队列

队列,和栈一样,也是一种对数据的"存"和"取"有严格要求的线性存储结构。什么是队列与栈结构不同的是,队列的两端都"开口",要求数据只能从一端进,从另一端出,如下图示: 通常,称进数据的一端为 "队尾",出数据的一端为 "队头",数据元素进队列的过程称为 "入队",出队列的过程称为 "出队"。不仅如此,队列中数据的进出要遵循 "先进先出" 的原则,即最先进队列的数据元素,同样要最先出队列。拿图 1...

weixin_39789101的博客 1687

队列(顺序队列,循环队列,链式队列)超详细讲解

本文是队列(包括顺序队列,循环队列,栈式队列的详细讲解)

m0_56992713的博客 5725
上一篇: 链栈
下一篇: 编写一个c函数,该函数给出一个字节中被置为1的位的个数
x_unknown
博客等级 码龄9年 10粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值