基于顺序表的队列基本操作实现

3.4 队列的顺序实现 队列 一、用顺序存储实现队列 #define MaxSize 10 //定义队列中元素的最大个数 typedef struct{ ElemType data[MaxSize]; //用静态数组存放队列元素 int front,rear; //队头指针和队尾指针 }SqQueue; //Sq:sequence---顺序 //初始化队列 void InitQueue(SqQueue &Q){ //初始时 队头、队尾指针指向0 Q.rear=Q.front 阅读详情
程序代码:

#include<stdio.h>
#include<stdlib.h>
#define SeqQueueType char

#define SeqQueueMax 1000

typedef struct Queue{
SeqQueueType data[SeqQueueMax];
size_t head;
size_t tail;
size_t size;
} SeqQueue;
//顺序队列的初始化
void SeqQueueInit(SeqQueue* seq){
if(seq == NULL){
return;
}
seq->head = 0;
seq->tail = 0;
seq->size = 0;
}


//顺序队列到入队
void SeqQueuePush(SeqQueue* seq,SeqQueueType value){
if(seq == NULL){
return;
}
seq->data[seq->tail] = value;
++seq->tail;
seq->tail%=SeqQueueMax;
++seq->size;
}

//顺序队列的出队
int SeqQueuePop(SeqQueue* seq,SeqQueueType* value){
if(seq == NULL){
return 0;
}
if(seq->size == 0){
return 0;
}
*value = seq->data[seq->head++];
--seq->size;
seq->head %= SeqQueueMax;
return 1;
}

//取顺序队列的队首元素
int GetSeqQueueTop(SeqQueue* seq,SeqQueueType* value){
if(seq == NULL){
return 0;
}
if(seq->size == 0){
return 0;
}
*value = seq->data[seq->head];
return 1;
}
//打印顺序队列的元素,方便检测队列的基本操作
void printQueue(SeqQueue* seq,char* str){
printf("\n********%s*******\n",str);
if(seq == NULL){
return;
}
size_t i=0;
for(;i<seq->size;i++){
printf("%c ",seq->data[i]);
}
printf("\n");
}
检测代码:

//检测顺序队列的操作
void test(){
SeqQueue seq;
SeqQueueType value;
int ret;
SeqQueueInit(&seq);
SeqQueuePush(&seq,'a');
SeqQueuePush(&seq,'b');
SeqQueuePush(&seq,'c');
SeqQueuePush(&seq,'d');
printQueue(&seq,"4 Push");

//取队首元素
ret = GetSeqQueueTop(&seq,&value);
printQueue(&seq,"GetQueueTop");
printf("expect ret: 1   actual: %d\n",ret);
printf("expect value: a   actual: %c\n",value);
//第一次出队
ret = SeqQueuePop(&seq,&value);
printQueue(&seq,"1 Pop");
printf("expect ret: 1   actual: %d\n",ret);
printf("expect value: a   actual: %c\n",value);
//第二次出队
ret = SeqQueuePop(&seq,&value);
printQueue(&seq,"2 Pop");
printf("expect ret: 1   actual: %d\n",ret);
printf("expect value: b   actual: %c\n",value);
//第三次出队
ret = SeqQueuePop(&seq,&value);
printQueue(&seq,"3 Pop");
printf("expect ret: 1   actual: %d\n",ret);
printf("expect value: c   actual: %c\n",value);
//第四次出队
ret = SeqQueuePop(&seq,&value);
printQueue(&seq,"4 Pop");
printf("expect ret: 1   actual: %d\n",ret);
printf("expect value: d   actual: %c\n",value);
//对空队列进行出堆操作
ret = SeqQueuePop(&seq,&value);
printQueue(&seq,"5 Pop");
printf("expect ret: 0   actual: %d\n",ret);
//对空队列进行取队首元素
ret = GetSeqQueueTop(&seq,&value);
printQueue(&seq,"NULl GetQueueTop");
printf("expect ret: 0   actual: %d\n",ret);
}

//主函数
int main(){
test();
}

检测结果:

[chaiyandong@localhost shujujiegou]$ ./seq


********4 Push*******
a b c d 


********GetQueueTop*******
a b c d 
expect ret: 1   actual: 1
expect value: a   actual: a


********1 Pop*******
a b c 
expect ret: 1   actual: 1
expect value: a   actual: a


********2 Pop*******
a b 
expect ret: 1   actual: 1
expect value: b   actual: b


********3 Pop*******
a 
expect ret: 1   actual: 1
expect value: c   actual: c


********4 Pop*******


expect ret: 1   actual: 1
expect value: d   actual: d


********5 Pop*******


expect ret: 0   actual: 0


********NULl GetQueueTop*******


expect ret: 0   actual: 0

数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈) 还记得数据结构这个经典的分类图吧: pic1 今天主要关注一下线性表。 什么是线性表 线性表的划分是从数据的逻辑结构上进行的。线性指的是在数据的逻辑结构上是线性的。即在数据元素的非空有限集中 (1) 存在唯一的一个被称作“第一个”的数据元素,(2) 存在唯一的一个被称作“最后一个”的数据元素,(3) 除第一个外,集合中的每个数据元素均只有一个前继元素,(4)除最后一个外,集合中的每个 阅读详情

相关推荐

C++数据结构,以顺序表作为队列成员变量实现队列

南京工程学院数据结构题。以顺序表作为队列成员实现队列

【数据结构】队列的实现

队列 概念 队列也是一种特殊的线性表, 只允许在一端进行擦汗如操作, 另一端进行删除操作, 元素具有先进先出的特点, 插入操作的一端 叫做队尾, 删除的一段叫做队头. 实现 队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据 效率会比较低。使用链表的话我们使用尾插和头删, 时间复杂度都是O(1), 效率更高一点....

卑微楽的开发之路 399

标志量循环队列初始化void initqueue(seqqueue Q).cpp

标志量循环队列初始化void initqueue(seqqueue Q).cpp

队列基本操作实现---顺序结构

顺序队列

weixin_63233998的博客 198

queue.h队列的定义以及一些说明

队列的声明---这个是 c prime plus 17章的学习内容,这部分代码是队列的声明 biubiu

基于Quartus II软件的FPGA综合实验——多功能数字钟

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、设计要求二、设计原理三、设计过程1.数码管扫描模块2.计时模块3.闹钟模块4.闹钟响铃模块5.数码管显示模块6.整点报时功能7.模式选择模块(计时器主控电路)四、实验中遇到的困难及解决方案五、总结 前言 FPGA综合实验——多功能数字钟 基于Quartus II软件 一、设计要求 设计一个能进行时、分、秒计时的十二小时制或二十四小时制的数字钟,并具有定时与闹钟功能,能在设定的时间发出闹铃音,能非常方便地对小时、分钟和秒进.

qq_53022342的博客 2万+

数据结构-基于顺序表实现顺序队列

首先了解队列这种结构: 只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表 进行插入操作的一端称为队尾(入队列) 进行删除操作的一端称为对头(出队列) 队列具有先进先出的的特性 基于顺序表实现的队列有以下操作: 初始化队列 入队列 出队列 取队首元素 销毁队列 定义结构定义了一个最大长度为100的队列,一个size用来记录当前顺序队列的大小,一个head一个ta

mxrrr_sunshine的博客 795

【Python】torch_npu

Ascend AI处理器核心计算范式与PyTorch的桥接艺术:深入探索torch_npu的基石要真正理解,我们必须首先超越其作为PyTorch后端库的表面认知,深入其所服务的硬件——华为昇腾(Ascend)AI处理器的核心计算范式。这不仅仅是关于如何在NPU上运行PyTorch模型,更是关于NPU如何设计其计算,以及如何巧妙地将这种硬件特性映射到PyTorch的抽象层之上。1. 昇腾AI处理器的达芬奇架构:极致算力的源泉昇腾AI处理器并非传统的CPU或GPU。它采用了华为独创的达芬奇(Da Vinci)架

宅男很神经 5372

基于顺序存储结构的循环队列的实现-数据结构作业(C语言)

实验名称: 基于顺序存储结构的循环队列的实现 目录 一、实验目的 二、实验任务 三、程序框架 四、程序完整代码 一、实验目的 加深对队列结构的概念、基本运算的理解; 熟练掌握队列的逻辑结构与物理结构的关系; 物理结构采用顺序存储结构,熟练掌握顺序队列存储结构各种基本运算的实现。 二、实验任务 认真研读框架程序,根据提供的实验框架(框架可以直接运行),构造一个具有菜单的功能演示系统。根据功能要求实现队列各种功能演示: void InitQueue(SeqQueue *Q);//初始

kim的博客 1285

华为Atlas200DK实战指南:从零搭建AI开发环境到人像语义分割模型部署

本文提供了一份详尽的华为Atlas 200DK AI开发环境搭建与模型部署实战指南。文章采用合设环境方案,从SD卡准备、系统镜像烧录、网络配置到必备工具安装,逐步引导开发者完成环境搭建。核心部分详细讲解了如何利用华为ATC工具将TensorFlow模型转换为昇腾专用格式,并最终成功编译和运行人像语义分割模型,实现实时人像识别效果。

weixin_29309213的博客 356

伪距单点定位算法原理以及利用最小二乘法计算实例

即该公式:建立下列代价函数满足最佳估值的条件为:即:可解得未知参数 X 的最佳估值由于每个可见卫星观测量的精度可能不一样,这时,需要对不同观测量赋予一个权重系数,称为加权。

qq_43381998的博客 1万+

【数据结构】队列(顺序表实现)的基本操作

队列的基本操作。

Blog 304

告别以太网瓶颈:手把手教你为AI训练集群搭建InfiniBand网络(以NVIDIA DGX A100/H100为例)

本文详细指导如何为AI训练集群搭建InfiniBand网络,解决以太网瓶颈问题,特别针对NVIDIA DGX A100/H100系统。通过硬件选型、网络架构设计和性能调优,显著提升多机多卡训练效率,适用于大规模模型训练场景。

weixin_30336061的博客 310

数据结构-顺序表实现队列的基本操作

队列的定义 队列是另一种限定的数据结构,它只允许在表的一端插入,另一端删除。所以队列具有先进先出的特性。这与我们生活中的排队是一个道理。 在队列中允许删除的一端叫做队头,允许插入的一端叫做队尾。 队列分类 顺序队列(容易引起假溢出情况:顺序队列因多次入队,出队后出现的尚有存储空间,但不能在进行如队列的操作) 优先级队列 循环队列 本文用顺序表实现队列的基本操作 初始化 操作前提...

zgege的博客 1083

淘特App x-sign参数逆向实战:从抓包到算法定位

本文详细解析了淘特App的x-sign参数逆向过程,从抓包分析到算法定位,涵盖了使用jadx-gui进行静态分析、Frida动态Hook验证以及Native层算法还原等关键技术。文章重点介绍了x-sign参数的生成机制及其在阿里系应用中的安全防护策略,为逆向工程师提供了实用的调试技巧和对抗策略。

5b6n7m8的博客 228

49、Linux内核内存管理:MGLRU、DAMON与OOM杀手详解

本文详细解析了Linux内核内存管理中的三大核心机制:MGLRU(多代LRU)页面追踪与回收机制、DAMON数据访问监控工具及其在内存优化中的应用,以及OOM(内存不足)杀手的工作原理和触发方式。同时,文章还介绍了VM overcommit_memory策略的设置及其对内存分配的影响,帮助开发者和系统管理员更好地理解Linux内存管理机制,从而优化系统性能和稳定性。

dropout6artist的博客 108

链表,顺序表的基本操作及其实现的栈与队列

1,顺序表 在c里面,这一部分也就是静态表和动态表的实现,插入,删除有丁点意思。 静态表靠数组和长度实现(注意长度这一点,因为它反映了当前表内容长度,十分重要) 动态表依靠申请连续空间实现(结构体内部包括首地址,当前规模以及长度) 插入: int *p; p=&(w.a[k-1]); int *q; for(q=&(w.a[w.length-1]);q>=p;--q) {

Flanz_Hawk的博客 663

AutoSAR配置视频讲解:总目录

AutoSAR实验视频讲解:闪烁一颗LED实验【总目录】 欢迎大家来到雪云飞星的《AutoSAR实验视频讲解》,本专栏是一个关于AutoSAR的闪烁LED灯的实验课程,一共8节课,每节课的视频都放在文章最后,传送门如下: 前言 AutoSAR实验视频讲解:简介 EB 的Mcal配置 AutoSAR实验视频讲解:Mcal配置 DaVinci Cfg配置 AutoSAR实验视频讲解:新建DaVinci工程 AutoSAR实验视频讲解:Os配置(预计2021-3-10更新) AutoSAR实验视频讲解:检查校验报

雪云飞星的博客 2万+

C/C++:顺序表实现队列的定义和基本操作

  队列是一种先进先出的数据结构 ,很多场景下都有应用,以下为源代码: #include &lt;stdio.h&gt; #include &lt;malloc.h&gt; typedef struct LNode* Queue; typedef char QueueData; struct LNode { //队列结构体,数据从队列头进入,从队列尾出去 QueueData *data; ...

YDDUONG的博客 1007

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

队列的基本操作实验报告c语言,队列(顺序表)基本操作实现(c语言)

#include #include #define MAX_SIZE 100typedef int ElemType;typedef struct node{int front;int rear;ElemType data[MAX_SIZE];}*queueList,queueNode;//顺序队列初始化queueList initQueueList(){queueList q=(queueLis...

weixin_36269385的博客 817

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

队列(顺序表)基本操作实现(c语言)

#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #define MAX_SIZE 100 typedef int ElemType; typedef struct node{ int front; int rear; ElemType data[MAX_SIZE]; }*queueList,queueNode; //顺序...

rj2017211811的博客 1925

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

分别基于顺序表和链表实现队列

队列 只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front) 基于顺序表实现 package src.bit0414.Test; /** * @ Created with IntelliJ IDEA...

Josvin 273

用顺序表实现队列(C语言)(队列的基本操作:创建,销毁尾插,头删,返回队首队尾元素,返回队列大小,判空和打印)

用顺序表实现队列 1、队列的概念: **队列:**只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 2、队列的结构 队列可以使用数组和链表结构实现,使用链表的结构更优,可以减少在出队的开销,数组在出队操作时的消耗较大 //顺序队列结构 #define MAX_SIZE 999 typ...

gp1330782530的博客 1223

循环顺序表实现队列

循环顺序表实现队列的基本操作不能插入字符 用%c 存储 老是不能输入字符  改成插入为数字了准备去温习下字符的知识点 有改动会更新代码 = =//循环顺序表实现队列的基本操作 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #define maxsize 50 #define True 1 #define False 0 //status状态信息...

huayuhuaxi的博客 491

【数据结构】栈和队列的实现

/ 支持动态增长的栈int top;// 栈顶// 容量}Stack;// 链式结构:表示队列}QNode;// 队列的结构int size;}Queue;栈和队列都是一种特殊的线性表。栈的特点:后进先出,只能在表尾进行插入和删除。队列的特点:先进先出,只能在表头删除,在表尾插入。栈常用顺序存储结构即数组的方式,因为数组的尾插尾删效率高,但可能会存在频繁开辟内存空间和内存空间浪费的问题。

2401_85054434的博客 1292

java实现顺序队列

使用java语言实现顺序队列

初心不忘、始终方得 2906
上一篇: 栈的基本操作
下一篇: 基于链表的队列基本操作的实现
CYD、孤狼
博客等级 码龄9年 24粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值