线性表7:队列的顺序存储——顺序队列

队列(顺序存储)基本操作 顺序存储队列的基本操作队列特点队列基本操作代码实现测试结果展示 队列特点 ①队列是一种操作受限的线性表 ②队列只允许在一端进行插入(即入队),另一端进行删除(即出队);队尾进,对头出(First In First Out ,FIFO) 队列基本操作 //初始化队列,构造一个空的队列 void initQueue(SqQueue &Q); //判断队列是否为空 bool QueueIsEmpty(SqQueue Q); //入队操作 void enQueue(SqQueue &Q,int va 阅读详情


从数据结构角度看,栈和队列也是线性表,只不过是操作受限的线性表。

队列:操作限制在两端的线性表,一端进行插入操作,称为队尾;另一端进行删除操作,称为队头。

顺序队列,又称之为循环队列,将队列循环处理,是为避免假溢出。下文的顺序队列都代表循环队列。
假溢出现象:队列里明明是有空间,但是不能再进行入队操作。

1.队列的特点

先进先出(FIFO)
存储:顺序存储、链式存储

2.顺序队列的描述

**描述:**数组+front指针+rear指针
front保存队头的前一个位置,rear保存队尾的下标

#define MAXSIZE 100

typedef int datatype;
typedef struct 
{
	datatype data[MAXSIZE];
	int front;//始终指向队首的前一个位置
	int rear;//始终指向队尾
}sequeue;

3.基本操作

3.1创建空顺序队列

在这里插入图片描述

sequeue * createSeQueue()
{
	//1.申请空间
	sequeue * Q = (sequeue *)malloc(sizeof(sequeue));
	if(NULL == Q)
	{
		printf("create: malloc fail\n");
		return NULL;
	}

	//2.初始化
	Q->front = Q->rear = MAXSIZE-1;

	return Q;
}

3.2判空

int isEmptySeQueue(sequeue * Q)
{
	return (Q->front == Q->rear)?1:0;
}

3.3判满

在这里插入图片描述

int isFullSeQueue(sequeue * Q)
{
	return ((Q->rear+1)%MAXSIZE == Q->front)?1:0;
}

3.4入队

int inSeQueue(sequeue * Q, datatype x)
{
	//非满则入队
	if(isFullSeQueue(Q))
	{
		printf("队列已满\n");
		return -1;
	}

	//入队操作rear
	Q->rear = (Q->rear+1)%MAXSIZE;
	Q->data[Q->rear] = x;

	return 0;
}

3.5出队

int OutSeQueue(sequeue * Q, datatype *x)
{
	//非空则出队
	if(isEmptySeQueue(Q))
	{
		printf("队列是空\n");
		return -1;
	}

	//出队操作front
	Q->front = (Q->front+1)%MAXSIZE;
	*x = Q->data[Q->front];

	return 0;
}

3.6打印输出

在这里插入图片描述

void showSeQueue(sequeue * Q)
{
	int i = 0;
	for(i = (Q->front+1)%MAXSIZE; i != (Q->rear+1)%MAXSIZE; i = (i+1)%MAXSIZE)
	{
		printf("%d ", Q->data[i]);
	}
	printf("\n");
}

测试

	int i;
	sequeue * Q = createSeQueue();
	if(NULL == Q)
		return -1;

	for(i = 0; i < 10; i++)
	{
		if(!isFullSeQueue(Q))
			inSeQueue(Q, i);
	}
#if 0	//测试出队
	datatype x;
	while(!isEmptySeQueue(Q))
	{
		OutSeQueue(Q, &x);
		printf("%d ", x);
	}
	printf("\n");
#endif

	showSeQueue(Q);

    return 0;
数据结构——线性表的顺序表示与实现(顺序表) 文章目录线性结构的定义:线性表一、线性表的定义和特点例1 分析26 个英文字母组成的英文表例2 分析学生情况登记表顺序存储结构存在问题二、线性表的类型定义 线性结构的定义: 若结构是非空有限集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。 可表示为:(a1 , a2 , ……, an) 线性表 线性结构表达式:(a1 , a2 , ……, an) 线性结构的特点: ① 只有一个首结点和尾结点; ② 除首尾结点外,其他结点只有一个直接前驱 阅读详情

相关推荐

线性表、顺序表、链表、栈、队列和数组之间的区别与联系

Data Structures 第一周基础知识总结写在前面正文1. Why do we study Data Structures?2. Data structures3. Sorting Methods4. Main steps of problem solving5. The definition of algorithm6. Properties of an algorithm7. Algorithm analysis(important)8. Why time complexity is more

MrainW的博客 1740

数据结构复习题——填空题与程序填空题

本题要求给出希尔排序对给定初始序列{9, 8, 7, 6, 5, 4, 3, 2, 1}利用增量序列{1, 3, 7}进行排序的分步结果。本题目要求Init_SeQueue()函数初始化循环队列,返回指向队列的指针,Empty_SeQueue(c_SeQueue *q)函数判空队列,空队列返回1。本题目要求Out_SeQueue (c_SeQueue *q , datatype *x)函数将 出循环队列的值送给变量x。/*队中元素的个数*/下列代码的功能是返回带头结点的单链表L的逆转链表。

weixin_46448596的博客 5426

Verilog实战:手把手教你实现IEEE 754单精度浮点乘法器(附完整代码)

本文详细介绍了如何使用Verilog实现IEEE 754单精度浮点乘法器,包括标准解析、架构设计、Verilog代码实现及优化技巧。通过两级流水线设计,平衡性能与面积,适用于数字信号处理、AI加速器等高性能计算场景。

weixin_33724046的博客 315

程序填空题

5-1 链栈入栈出栈操作。 #include<iostream> using namespace std; typedef char SElemType; typedef struct StackNode { SElemType data; struct StackNode *next; } StackNode, *LinkStack; int Push(LinkStack &S, SElemType e) { LinkStack p; p

大家一起入坑 6166

Ubuntu 22.04下GNU Radio 3.10全家桶编译避坑实录:从UHD、VOLK到WiFi收发模块gr-ieee802-11

本文详细介绍了在Ubuntu 22.04系统下编译安装GNU Radio 3.10全家桶的完整流程,包括UHD驱动、VOLK优化库以及WiFi信号处理模块gr-ieee802-11的集成。通过逐步指导解决版本兼容性和依赖问题,帮助研究人员快速搭建高效的软件定义无线电开发环境,特别适合使用USRP设备进行无线通信研究的开发者。

weixin_30825199的博客 447

别再一个个BAPI调了!用CVI_EI_INBOUND_MAIN一次性搞定SAP BP主数据(附完整ABAP代码)

本文详细介绍了如何使用SAP标准函数CVI_EI_INBOUND_MAIN高效维护业务伙伴(BP)主数据,替代传统的多BAPI调用方式。通过完整ABAP代码示例,展示了如何一站式处理供应商、客户、公司代码等所有视图的创建与更新,提升数据一致性和开发效率。

weixin_29204205的博客 298

队列的顺序存储的基本操作

队列(先进先出) 定义 #define MaxSize 50 typedef struct { int data[MaxSize]; int front,rear;//front指向第一个元素,尾指针指向最后一个元素的下一个位置 }Queue; 初始化,判断是否为空 void InitQueue(Queue &q) { q.front=q.rear=0; } bool IsEmpty(Queue q) { if(q.front==q.rear) return true; retur

Li__dawn的博客 308

群晖NAS断电后IP变了?3步搞定静态IP设置(附Linux挂载指南)

本文针对群晖NAS因断电重启导致IP地址变化的问题,提供了从根源到实践的完整解决方案。核心内容包括如何为NAS配置静态IP以彻底解决连接中断,并详细讲解了在Linux系统中通过NFS协议稳定挂载NAS共享文件夹的步骤与指南,确保网络存储服务持久可靠。

weixin_29271263的博客 858

【数据结构复习03】队列的顺序存储实现及基本操作

队列的顺序存储实现及基本操作 队列的顺序存储类型描述 #define MAXSIZE 10 typedef struct{ int data[MAXSIZE]; //存放队列元素 int front,rear; //队头指针和队尾指针 }SqQueue; 注意事项 顺序队列的队尾指针有两种情况,一种是将队尾指针指向队尾元素,一种是将队尾指针指向队尾元素的后一位(本文采取这种情况),两种情况在初始化时,前者为:front=0,rear=-1;后者为:front=rear=0。除此外,两种情况在判空

weixin_43951940的博客 1428

微信小程序 - 最新详细实现用户保存下载视频到手机相册,将视频临时路径、在线播放地址(网络路径)URL存储到手机,弹出访问手机相册权限询问,支持视频格式mp4、avi、mov、wmv、flv、webm

微信小程序,视频,手机相册,保存,另存为,小程序保存到相册权限,writePhotosAlbum,一键保存视频到手机相册功能(视频来源为链接),第一次要获取用户授权,授权使用相册权限,小程序视频下载,如何把视频下载到相册,下载一个视频到本地相册,显示下载进度,可取消下载,视频下载到本地,微信小程序视频如何下载,保存视频到相机,页面播放视频并下载到本地,安卓系统,苹果ios保存到相册报错,权限拒绝后打不开,添加相册授权弹框拒绝后再也出不来了,实现保存视频到手机相册功能,将mp4在线视频下载并存储到用户的手机中

🏆 前端领域优质创作者 7627

华为OD 面试手撕代码真题【判断链表是否有环】

华为OD 面试手撕代码真题【判断链表是否有环】

MISAYAONE的博客 7239

实现一个顺序存储的队列(数据结构与算法 - 队列)

相关知识 队列是一个插入操作和删除操作受到限制的线性表数据结构。队列的插入和删除被限制在表的两端,即插入操作只能在表的一端进行,而删除操作只能在表的另一端进行,因此队列又称先进先出表。 顺序存储的队列 队列既可以采用顺序存储,也可以采用链接存储来实现。下面给出了一种基于顺序存储的队列实现方案: 该队列存储了 4 个元素 {56,77,15,12} ,其中 56 为队列头, 12 为队列尾。 这种...

韶言大雅 1万+

Python爬虫实战:全自动采集银行理财产品收益率数据

本文通过Playwright动态爬虫技术,成功实现了对银行理财产品收益率数据的实时采集,并通过 Pandas 数据清洗、SQLite 存储、调度自动化等模块,构建了一个可扩展的银行理财数据抓取系统。理财非儿戏,数据做决策。掌握银行收益信息是我们迈向理性投资的第一步。希望这套工具对你有所帮助!

2201_76125261的博客 1156

2.1实现一个顺序存储的线性表(educoder数据结构线性表实训题)

任务描述 本关任务:实现 step1/Seqlist.cpp 中的SL_InsAt、SL_DelAt和SL_DelValue三个操作函数,以实现线性表中数据的插入、删除与查找等功能。 相关知识 线性表是最基本、最简单、也是最常用的一种数据结构。线性表结构中,数据元素之间通过一对一首尾相接的方式连接起来。具体实现时,线性表可以采用不同的存储策略。下面给出了一种基于顺序存储的线性表实现方案: 该方案将线性表存储在一片连续空间里,并通过data、len和max三个属性元素。组织成为一个结构: dat

weixin_51575278的博客 9752

OpenClaw 性能调优五步法

本文介绍了优化OpenClaw性能的五步方法,将响应时间从3秒降至300毫秒。首先建立性能基线,分析模型加载、上下文检索等主要瓶颈。五步优化包括:1)启用模型缓存减少60%延迟;2)优化记忆检索策略降低25%延迟;3)并行化工具调用节省40%时间;4)智能选择轻量级模型减少50%推理时间;5)启用流式输出改善70%感知延迟。最终整体性能提升10倍,并建议建立持续监控机制。这些优化方法经过实战验证,适用于不同规模的OpenClaw部署场景。

刘一说的IT专栏 1443

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

队列的顺序存储与链式存储

队列就是我们日常生活中的排队,队列也是一种线性表,与堆栈相反,队列的入列必须在队尾,出列必须在队头。与一般的线性表不同,队列的操作只能在两端,一端插入一端删除,先进先出。(堆栈只能在一端进行操作,所以先进后出)。队列的存储方式这里讲两种,首先第一种是用数组的方式实现队列的顺序存储。用一个一维数组来存储队列的数据,对队列执行操作时,插入和删除分别是对数组头和数组尾进行操作,所以还要有两个变量来指示数...

大力海棠的博客 4924

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数据结构——线性表(顺序存储结构)

利用数组实现的顺序存储的线性表,包含各种操作的具体实现

qq_55869380的博客 3997

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

顺序表(详解)- C++(线性表顺序存储结构)

顺序表(详解)- C++(线性表顺序存储结构)

m0_54158068的博客 4077

队列——队列的定义及基本操作(顺序存储队列和链队列的初始化、入队、出队、判空等)

文章目录队列队列的存储队列的基本操作顺序存储下队列的基本操作实现循环队列链式存储下队列的基本操作实现 队列  队列(Queue)简称队,也是一种操作受限的线性表,只允许在表的一端进行插入而在表的另一端进行删除。向队列中插入元素称为入队或进队,删除元素称为出队或离队。最早进队的也是最早出队的,故其操作特性是先进先出FIFO(First In First Out),故又称为先进先出的线性表。 队头Front:允许删除的一端,又称队首。 队尾Rear:允许插入的一端。 队列的存储  队列的存储一般分为两种:

薛定谔的猫的博客 1万+

数据结构:队列(顺序存储和链式存储)

主要介绍了队列的概念和结构,还有队列的顺序存储实现和链式存储实现的详细说明和代码实现,最后再对比队列的顺序存储结构和链式存储结构的优缺点

2301_79601095的博客 3162

线性表——顺序存储结构

了解线性表的顺序存储结构、实现简单的动态数组!

2301_76695577的博客 1446

限定性线性表—队列(顺序存储及链式存储)

目录1. 队列概述1.1 队列定义1.2 队列演示2. 队列顺序存储2.1 顺序存储定义2.2 循环队列2.3 顺序存储队列常规操作2.3.1 初始化与清空2.3.2 空队列与满队列判断2.3.3 入队与出队2.3.4 其他操作3. 队列链式存储3.1 链式存储定义3.2 链式存储队列常规操作3.2.1 初始化与销毁3.2.2 空队列判断3.2.3 入队与出队3.2.4 其他操作4. 总结 1. 队列概述 1.1 队列定义 队列是只允许在一端进行插入操作,在另一端进行删除操作的线性表。 队列是一种先进先出的

郭永明的技术专栏 3950

数据结构(3)— 线性表之顺序存储详解介绍(含代码)

数据结构(3)— 线性表之顺序存储详解介绍(含代码)

在嵌入式嵌入式领域奋斗的程序猿的博客 3594

队列的顺序存储结构

1.算法原理分析如下图 2.队列的顺序存储代码 要依赖于之前的文章中的seqlist_02.h和seqlist_02.cpp 线性表的顺序存储(业务结点和算法逻辑分离) seqqueue.h如下: #ifndef _MY_SEQQUEUE_H_ #define _MY_SEQQUEUE_H_ typedef void SeqQueue; //创建队列 SeqQueue* SeqQueue_Create(int capacity); //销毁 队列 void SeqQueue_De.

zhc的博客 508

线性表数据结构-队列

我们把队列中允许插入的一端称为「队尾(rear)」;把允许删除的另一端称为「队头(front)」。当表中没有任何数据元素时,称之为「空队」「插入操作」和「删除操作」。队列的插入操作又称为「入队」。队列的删除操作又称为「出队」。简单来说,队列是一种「先进先出(First In First Out)」的线性表,简称为「FIFO 结构」。第一个方面是「线性表」。队列首先是一个线性表,队列中元素具有前驱后继的线性关系。队列中元素按照 a1,a2,...,ana_1, a_2, ... , a_na。

Raink老师的博客 1529

数据结构学习笔记——队列的基本知识和顺序存储结构实现队列(顺序队列)

顺序队列中使用数组来存储队列元素,通过一组数组地址的连续的存储单元来存放从队头至队尾的数据元素,同时设置两个指针,分别是队头指针front和队尾指针rear,用于指示队头元素和队尾元素,定义的代码如下: 三、顺序队列的初始化 当时,表示顺序队列的初始状态,队列为空,如下代码: 四、判断顺序队列是否为空队 判断顺序队列是否为空队时,可以判断两个指针是否相等,即,如下代码: 五、判断顺序队列是否为满队 注意,这里判断顺序队列是否为满队的代码,实质上并不是能真正地判断出来,因为存在“假溢出”的现象,当队列还有一个

小宇y的博客 4238
上一篇: 线性表6:栈的链式存储(链栈)
下一篇: 线性表8:队列的链式存储——链队
hellohelloe
博客等级 码龄8年 18粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值