#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "time.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */
typedef int Status;
typedef int QElemType; /* QElemType 类型根据实际情况而定,这里假设为 int */
/* 循环队列的顺序存储结构 */
typedef struct {
QElemType data[MAXSIZE];
int front;/* 头指针 */
int rear; /* 尾指针,若队列不空,指向队列尾元素的下一个位置 */
} SqQueue;
/* 打印 */
Status visit(QElemType c) {
printf("%d ", c);
return OK;
}
/* 初始化一个空队列 Q */
/* 存储栈的数组已经定义,所以这里只操作指针。 */
Status InitQueue(SqQueue *Q) {
Q->front = 0;
Q->rear = 0;
return OK;
}
/* 将 Q 清为空队列 */
Status ClearQueue(SqQueue *Q) {
Q->front = Q->rear = 0;
return OK;
}
/* 若队列 Q 为空队列,则返回 TRUE,否则返回 FALSE */
Status QueueEmpty(SqQueue Q) {
if (Q.front == Q.rear) /* 队列空的标志 */
return TRUE;
else
return FALSE;
}
/* 返回 Q 的元素个数,也就是队列的当前长度 */
int QueueLength(SqQueue Q) {
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
/*
c语言中的%可用于模运算,即求余数。
表达式 a % b 就是计算 a 除以 b 得出的余数。
例如: 4 % 3 的结果是 1
*/
}
/* 若队列不空,则用 e 返回 Q 的队头元素,并返回 OK,否则返回 ERROR */
Status GetHead(SqQueue Q, QElemType *e) {
if (Q.front == Q.rear) /* 队列空 */
return ERROR;
*e = Q.data[Q.front];
return OK;
}
/* 若队列未满,则插入元素 e 为 Q 新的队尾元素 */
Status EnQueue(SqQueue *Q, QElemType e) {
if ((Q->rear + 1) % MAXSIZE == Q->front) /* 队列满的判断 */
return ERROR;
Q->data[Q->rear] = e;
/* 将元素 e 赋值给队尾 */
Q->rear = (Q->rear + 1) % MAXSIZE;/* rear 指针向后移一位置, */
/* 若到最后则转到数组头部 */
return OK;
}
/* 若队列不空,则删除 Q 中队头元素,用 e 返回其值 */
Status DeQueue(SqQueue *Q, QElemType *e) {
if (Q->front == Q->rear)
return ERROR;
/* 队列空的判断 */
*e = Q->data[Q->front];
/* 将队头元素赋值给 e */
Q->front = (Q->front + 1) % MAXSIZE; /* front 指针向后移一位置, */
/* 若到最后则转到数组头部 */
return OK;
}
/* 从队头到队尾依次对队列 Q 中每个元素输出 */
Status QueueTraverse(SqQueue Q) {
int i;
i = Q.front;
while ((i + Q.front) != Q.rear) {
visit(Q.data[i]);
i = (i + 1) % MAXSIZE;
}
printf("\n");
return OK;
}
int main() {
Status j;
int i = 0, l;
QElemType d;
SqQueue Q;
InitQueue(&Q);
printf("初始化队列后,队列空否?%u(1:空 0:否)\n", QueueEmpty(Q));
printf("请输入整型队列元素(不超过%d 个),-1 为提前结束符: ", MAXSIZE - 1);
do {
/* scanf("%d",&d); */
d = i + 100;
if (d == -1)
break;
i++;
EnQueue(&Q, d);
} while (i < MAXSIZE - 1);
printf("队列长度为: %d\n", QueueLength(Q));
printf("现在队列空否?%u(1:空 0:否)\n", QueueEmpty(Q));
printf("连续%d 次由队头删除元素,队尾插入元素:\n", MAXSIZE);
for (l = 1; l <= MAXSIZE; l++) {
DeQueue(&Q, &d);
printf("删除的元素是%d,插入的元素:%d \n", d, l + 1000);
/* scanf("%d",&d); */
d = l + 1000;
EnQueue(&Q, d);
}
l = QueueLength(Q);
printf("现在队列中的元素为: \n");
QueueTraverse(Q);
printf("共向队尾插入了%d 个元素\n", i + MAXSIZE);
if (l - 2 > 0)
printf("现在由队头删除%d 个元素:\n", l - 2);
while (QueueLength(Q) > 2) {
DeQueue(&Q, &d);
printf("删除的元素值为%d\n", d);
}
j = GetHead(Q, &d);
if (j)
printf("现在队头元素为: %d\n", d);
ClearQueue(&Q);
printf("清空队列后, 队列空否?%u(1:空 0:否)\n", QueueEmpty(Q));
return 0;
}
相关推荐
数据结构自学笔记三、队列
数据结构自学笔记三、队列队列的定义队列的应用顺序存储结构的队列普通队列循环队列 队列的定义 队列是只能在一端进行添加元素的操作(入队),在另一端进行删除元素操作(出队)的线性表。队列元素的特点是“先进先出”。 现实生活中大家都排过队,如果有新来的想要排队,ta必须站在最后一个,不然就是插队了,这是违反规则的;而排在第一个的人如果办完了事情,ta可以直接离开。不过比较坑的是,队列不允许排在中间的人中途离队,意思就是说,你要么别排,要么就一站到底。 队列的应用 还是小学的时候,在我们班流传着这样一种让电脑死机的
《大话数据结构》6一文学会数据结构中的循环链表存储结构(概念,实例,代码)循环链表
《大话数据结构》6一文学会数据结构中的循环链表存储结构(概念,实例,代码)循环链表
学习算法,你需要掌握这些编程基础(包含JAVA和C++)
前言 小伙伴们好呀!可爱的小编又来了。最近放寒假了,相信各位小伙伴已经做好满满的计划打算在寒假实现弯道超车。 这么美好的一段长假,不用来学习是在是太暴殄天物啦! 加上经常有小伙伴来问小编,学习算法需要掌握哪些编程语言?代码怎么学啊好难啊?是学Python好还是matlab好? 这些问题实在没有办法一一回答,所以今天我们就来聊一聊,学习算法需要掌握什么样的编程知识吧~ 值得注意的是,本文面向的对...
大话数据结构(C++版)链表
【代码】大话数据结构(C++版)链表。
【大话数据结构C语言】8 循环链表
系列文章参考资料为《大话数据结构》,源码为个人私有,未经允许不得转载 技术交流群或资料添加微信号:CoderAllen,回复关键字即可 将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾详解的单链表就是单循环链表,简称循环链表(circular linkedlist) 循环链表解决了一个单链表中很麻烦的问题 - 如何从当中一个结点出发,访问到链表的全部结点 循环链表带有头结点的空链表: 加粗样式 循环链表的非空链表: 其实循环链表和单链表的主要差异就在于循环的判断条件.
odoo19/18集成reportbro 打印插件 完美支持静默打印
ReportBro设计器 一个用于创建PDF和XLSX报告模板的javascript插件。ReportBro Designer可以轻松集成到您的Web应用程序中。每个人都可以设计和编辑文档模板,并直接在浏览器中预览它们。可以使用服务器上的 (有关完整的文档和演示,请参阅上的ReportBro项目网站。reportBro官方没有提供。测试环境:odoo17社区版。2.产品标签打印设计。
《大话数据结构》05 循环链表和循环列表
循环链表和双向链表也是线性表中链式结构的一部分,他们的出现是为了解决单链表不灵活的问题,学好这一课是深入学习数据结构与算法必不可少的的。
Plot3d 网格数据格式
PLOT3D是一个计算机图形程序,旨在可视化计算流体力学的网格和解决方案。PLOT3D文件可以是ASCII, 也可是Fortran unformatted 或 C binary形式。PLOT3D文件分为网格文件(XYZ 文件), 空气动力学结果文件 (Q 文件)和通用结果文件(函数文件 + 函数名称文件)。网格文件中可加入所谓的IBlank参数。
《大话数据结构》循环链表和双向链表
一、循环链表 定义: //A的头节点,即(1) p=rearA->next; //(2)后继指针的操作 //给我感觉就是,由于后继指针的特殊性,每次操作节点了,就是指向下个节点了,如果是指针操作,就还是老老实实呆在该节点 //注意B的头节点不要了 rearA->next=rearB->next->next; //B的头节点 q=rearB->...
调试备忘录-SWD协议解析
目录--点击可快速直达 文章目录写在前面1 SWD协议简介2 SWD物理层协议解析2.1 SWD通信时序分析2.2 SWD 寄存器简介2.2.1 DP寄存器2.2.2 AP寄存器2.3 SWD通信流程2.3.1 SWD复位2.3.2 SWD读IDCODE2.3.3 SWD清除错误标志位,并且使能AP调试2.3.4 SWD读取AP IDR(也就是AP寄存器的ID CODE)2.3.5 SWD读写MCU任意寄存器 写在前面 最近由于公司需要,所以就做了个基于SWD协议的离线烧写器。由于.
从零到一:RK3588嵌入式开发中的SDK与MPP集成实战解析
本文详细解析了RK3588嵌入式开发中SDK与MPP(Media Process Platform)的集成实战,涵盖开发环境构建、SDK架构解析、MPP集成关键技术点及常见问题诊断。通过Qt5.12.10交叉编译环境配置和硬件加速优化,帮助开发者高效完成嵌入式视觉项目开发,特别适合边缘计算应用场景。
双向循环链表创建、插入、删除操作 《大话数据结构》 c++代码实现
以下是用双向循环链表实现的线性表 #include <stdio.h> #include <stdlib.h> #include <time.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int ElemType;//ElemType这里假设为int,可以...
RK3588上rknn_toolkit_lite2报错解决:手把手教你更新librknnrt.so的正确姿势
本文针对在RK3588平台上使用rknn_toolkit_lite2时遇到的“Invalid RKNN model version”等常见错误,提供了完整的诊断与解决方案。文章深入剖析了RKNN生态系统各组件(如librknnrt.so、RKNN Server)版本不兼容的根源,并手把手指导如何安全、正确地更新librknnrt.so运行时库,确保AI模型在RK3588 NPU上实现高效推理。
Qiuner赠书活动:算法图解、C++ Primer Plus、大话数据结构、Java项目全程开发实录、算法导论、深度学习、第一视角带你构建大模型GPT
人年轻时常觉空虚,总想找点什么填满自己。买书,是我曾经的一种方式。但买得多,看得少。最近想着,这些书放着也是放着,不如抽几本送给粉丝,包邮寄出。
Spring AI提示词模板应用
本文介绍了使用SpringAI提示词模板的配置方法,主要步骤包括:1)在JDK17和SpringBoot3.4.4环境下引入spring-ai-alibaba1.0.0.2依赖;2)配置application.yml文件;3)创建测试控制器类处理提示词模板(.st文件);4)通过模板变量动态生成AI回复内容。演示了如何通过@RequestParam设置默认参数,实现无需前端传参即可测试AI回复功能,最终完成了一个SpringAI提示词模板的应用Demo。
19、时间触发通信与时间触发以太网技术解析
本文深入解析了时间触发通信和时间触发以太网(TTEthernet)技术,涵盖了其在实时系统中的应用,特别是安全关键领域如航空航天。文章详细介绍了TTEthernet的通信服务、协议参数化、时钟同步机制、诊断服务、故障隔离方法以及验证工作,并通过示例配置展示了其灵活性和可扩展性。TTEthernet通过引入确定性时间触发通信范式,在同一物理网络上实现了时间触发、速率受限和尽力而为三种流量类别的集成,为分布式实时系统提供了高可靠性和实时性保障。
数据结构总结
栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top)。当然,表也包括了很多类型,例如:线性表(链表),散列表,队列、栈等,他们都是表的一种特殊情况,而他们各自又可以根据情况不同,而使用不同的类型,比如说链表在不同的情况下可使用链表、双链表,循环链表。在这里,数值[0]所对应的便是milk,数值[3]所对应的便是apple,当我们查找apple时,它便会立马定位到数值[3],而不是通过遍历的方式从数值[0]一直往后遍历,因此它的时间复杂度仅为O(1)。
LoRa无线通信技术介绍(六)SX127X芯片收发程序讲解
接收LORA芯片SX127X的收发程序。
数据结构之线性表
数据结构之线性表写在前面Concept抽象数据类型顺序存储结构链式存储结构静态链表循环链表双向链表 写在前面 记一些数据结构复习过程中的随笔。我主要看的是程杰的大话数据结构和清华的那本数据结构。 Concept What is 线性表? 线性表:零个或多个数据元素的有限序列。 ps:这里的数据元素,可以由若干个数据项组成,例如由学生信息组成的线性表,每个学生信息结构体被认为线性表中的一个元素。 抽...
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
《数据结构与算法》(五)- 链表详解
目录链表的定义 链表的定义
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
数据结构之链表
2.然后,从第二个节点开始,依次将每个节点插入到头节点之后。这样,原来的第二个节点就变成了新的头节点,原来的第三个节点就变成了新的第二个节点,
数据结构与算法分析--线性表
在读研开始,需要了解一些数据结构方面的知识,就自己努力的敲代码啊。。。 在补习过程中,看了两位大神的著作:程杰的《大话数据结构》、解学武老师的网页文章。感觉很受用,再次表示感谢。 直接开始线性表:线性表、单链表、双链表、循环链表、静态链表。 线性表存储方式: //循环集合B中的每个元素,判断当前元素是否在A中,若不存在,则插入到A中 void union(List *La,List *L...
Java数据结构第一讲-排序算法
常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据结构,例如跳表之于redis、B+树之于mysql、倒排索引之于ES,熟悉了底层数据结构,对框架有了更深层次的理解,在后续程序设计过程中就更能得心应手。掌握常见数据结构和算法的重要性显而易见,本文主要讲解了几种常见的数据结构及基础的排序和查找算法,最后对高频算法笔试面试题做了总结。本文会持续补充,希望对大家日
(六)循环顺序队列的初始化、入队列、出队列
初学数据结构最好的办法可能是先读程杰写的《大话数据结构》,以下摘自豆瓣图书简介:《大话数据结构》以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。与市场上的同类数据结构图书相比,本书内容趣味易读,算法讲解细致深刻,是一本非常适合自学的读物
3、线性表
参考:《大话数据结构》程杰线性表(List):零个或多个数据元素的有限序列,具有像线一样的性质的表。因为是序列,元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都是有且只有一个前驱和后继。线性表强调是有限的。3.1、抽象数据类型ADT 线性表(List) Data 线性表的数据对象集合为{a1, a2,....an},每个元素的类型均为DataType
大话数据结构顺序表和链表
一 、顺序表 基本定义 typedef struct { int data[MAXSIXE]; int len; }SeqList; 基本操作 //初始化 SeqList *Init_SeqList() { SeqList *L; L=(SeqList*)malloc(sizeof(SeqList)); L->len=0; return L; } //创建线性表 void...
390



被折叠的 条评论
为什么被折叠?



