队列的数据结构实验报告

  • 实验目的:

1、理解队列数据结构的概念和特点。

2、熟悉队列的应用场景和算法实现。

二、实验内容(实验题目与说明)

实现了一个循环队列,具有功能:

  1. 初始化队列。
  2. 判断队列是否为空。
  3. 判断队列是否已满。
  4. 入队。
  5. 出队。

在 main() 函数中,先初始化队列,然后依次将元素 'a'、'b'、'c' 入队,再出队一个元素,输出该元素,接着将元素 'd'、'e'依次入队,最后输出出队序列,即元素 'b'、'c'、'd'、'e'。

三、算法设计(核心代码或全部代码)

#include <stdio.h>

#include <stdlib.h>

#define max 10

typedef struct {

    char data[max];

    int front;

    int rear;

} Queue;

// 初始化

void initQueue(Queue* q) {

    q->front = q->rear = 0;

}

// 判断队列是否非空

int Empty(const Queue* q) {

    return q->front == q->rear;

}

// 判断队列是否已满

int isQueueFull(const Queue* q) {

    return (q->rear + 1) % max == q->front;

}

// 入队

void enqueue(Queue* q, char elem) {

    if (isQueueFull(q)) {

        printf("队满\n");

        return;

    }

    q->data[q->rear] = elem;

    q->rear = (q->rear + 1) % max;

}

// 出队

char dequeue(Queue* q) {

    if (Empty(q)) {

        printf("队空\n");

        return '\0';

    }

    char elem = q->data[q->front];

    q->front = (q->front + 1) % max;

    return elem;

}

int main() {

    Queue q;

    initQueue(&q);

    // 判断队列是否非空

    printf("队列是空的吗? %s\n", Empty(&q) ? "Yes" : "No");

    // 进队元素a,b,c

    enqueue(&q, 'a');

    enqueue(&q, 'b');

    enqueue(&q, 'c');

    printf("出队: %c\n", dequeue(&q));

    // 进队元素d,e

    enqueue(&q, 'd');

    enqueue(&q, 'e');

    // 输出出队序列

    printf("出队: ");

    while (!Empty(&q)) {

        printf("%c ", dequeue(&q));

    }

    printf("\n");

    return 0;

}

  • 运行与测试(测试数据和实验结果分析

首先判断队列是否为空,然后三个元素a、b、c依次入队,然后a出队,d、e入队,然后全部出队,即显示b c d e,体现了队列先入先出的特点。如果出队输出结果时没能把入队的元素都输出出来,原因是一开始#define max 3,将符号常量 max 定义为 3但是入队d、e后有四个元素,队满了元素e就无法入队,出队时自然也看不见元素e

  • 总结与心得

  在进行队列数据结构实验的过程中,我对队列的概念和特点有了更深入的理解。队列是一种先进先出的数据结构,类似于排队等待服务的场景。队列的实现可以使用数组或链表,具体选择取决于实际需求。队列在实际应用中有广泛的用途,适用于需要按照先后顺序处理任务或数据的场景。通过实验,我深刻体会到了队列的优点和局限性。队列的入队和出队操作具有常数时间复杂度 O(1),因此在处理大量数据时表现出良好的性能。但是,队列的随机访问受限,只能从队首或队尾进行操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/599032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS基本知识

文章目录 1. CSS 是什么2. 基本语法规范3. 引入方式3.1 内部样式表3.2 行内样式表3.3 外部样式 4. 选择器4.1 选择器的功能4.2 选择器的种类4.3 基础选择器4.3.1 标签选择器4.3.2 类选择器4.3.3 id 选择器4.3.4 通配符选择器 4.4 复合选择器4.4.1 后代选择器4.4.2 伪类选择器 5…

【fiddler】fiddler抓包工具的使用

前言&#xff1a;我们可以通过fiddler软件&#xff0c;捕获到http请求&#xff0c;并修改请求参数 修改返回内容 fiddler下载,官网如下图 启动fiddler软件,点击file 选择 Capture Traffic 修改入参 (我们以谷歌浏览器发起请求为例) 此时会出现一个向上的箭头&#xff0c;点击…

Linux第8步_USB设置

学习完设置“虚拟机的电源”后&#xff0c;接着学习通过鼠标点击操作U盘&#xff0c;目的是了解USB设置。 1、在桌面&#xff0c;双击“VMware Workstation Pro”图标&#xff0c;得到下图&#xff1a; 2、点击“编辑虚拟机”&#xff0c;得到下图&#xff1a; 只要点击编辑虚…

Rockchip平台双屏异显功能实现(基于Android13)

Rockchip平台双屏异显功能实现(基于Android13) 1. 异显实现方案 Rockchip SDK平台支持两种不同的异显方案&#xff1a;Android Presentation和Android Activity指定屏幕启动。 使用Android Presentation方案&#xff0c;需要在APP开发中调用相应接口以使指定视图&#xff08…

【软件测试】2024年准备中/高级测试岗技术面试...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、软件测试基础知…

建设数字工厂管理系统解决方案需要哪些技术

随着科技的快速发展&#xff0c;数字化转型已成为工厂提升生产效率、降低成本、增强竞争力的关键。数字工厂管理系统作为这一转型的核心&#xff0c;集成了各种先进的技术&#xff0c;以确保工厂运行的流畅和高效。本文将深入探讨建设数字工厂管理系统解决方案所需的关键技术。…

利用Fastcgi+PHP-FPM非授权访问实现代码执行

目录 Fastcgi Record Fastcgi Type PHP-FPM&#xff08;FastCGI进程管理器&#xff09; Nginx&#xff08;IIS7&#xff09;解析漏洞 security.limit_extensions配置 漏洞演示 今天要和大家分享的是利用Fastcgi和PHP_FPM实现未授权访问实现代码执行&#xff0c;首先我们需…

element-ui组件DatePicker日期选择器移动端兼容

element-ui组件DatePicker日期选择器移动端兼容 css /** 移动端展示 **/ media screen and (max-width: 500px) {.el-picker-panel__sidebar {width: 100%;}.el-picker-panel {width: 400px!important;}.el-picker-panel__content {width: 100%;}.el-picker-panel__body{marg…

初识MySQL

一、什么是数据库 数据库&#xff08;Database&#xff0c;简称DB&#xff09;&#xff1a;长期存放在计算机内&#xff0c;有组织、可共享的大量数据的集合&#xff0c;是一个数据“仓库”。 数据库的作用&#xff1a; 可以结构化存储大量的数据&#xff0c;方便检索和访问…

U盘如何设置密码?U盘数据该怎么加密?

U盘等移动储存设备可以存储很多重要文件&#xff0c;方便我们随时使用。为了避免数据泄露&#xff0c;我们需要加密保护U盘数据。那么&#xff0c;U盘数据该怎么加密呢&#xff1f;下面我们就来了解一下。 U盘数据加密保护的必要性 目前&#xff0c;大多数的U盘并不具备数据加…

rhino犀牛怎么导入和调整背景图?

rhino犀牛怎么导入和调整背景图&#xff1f;Rhino建模过程中经常要用到背景图&#xff0c;为了更加方便快捷&#xff0c;我们会直接导入一些图片来当做背景&#xff0c;那么Rhino犀牛如何导入和调整背景图呢&#xff0c;让我们一起来看看吧 打开犀牛软件&#xff0c;进入操作界…

oracle用户密码过期导致cron失败

有客户反馈&#xff0c;有个测试环境很久不做自动备份。登录环境查看&#xff0c;发现oracle用户过期导致&#xff0c;如下 [roothydb ~]# su - oracle Last login: Wed Jan 3 10:19:40 CST 2024 on pts/0 orcl:/home/oraclehydb> crontab -l You (oracle) are not allow…

分布式数据之复制(Replication)

1.简介 1.1简介——使用复制的目的 在分布式系统中&#xff0c;数据通常需要被分散在多台机器上&#xff0c;主要为了达到以下目的&#xff1a; 扩展性&#xff0c;数据量因读写负载巨大&#xff0c;一台机器无法承载&#xff0c;数据分散在多台机器 上可以有效地进行负载均衡…

圣诞节来临,如何用海外云手机给亚马逊店铺引流?

马上就要到圣诞节了&#xff0c;这是一年中冲刺销售量的最后一个好机会&#xff0c;对所有亚马逊卖家都十分重要。而无论是亚马逊新手卖家还是老卖家&#xff0c;要想在激烈的竞争中取胜&#xff0c;仅仅靠产品本身是不现实的&#xff0c;通过测评和社媒引流获取更多曝光和流量…

LLM Agent之再谈RAG的召回信息密度和质量

话接上文的召回多样性优化&#xff0c;多路索引的召回方案可以提供更多的潜在候选内容。但候选越多&#xff0c;如何对这些内容进行筛选和排序就变得更加重要。这一章我们唠唠召回的信息密度和质量。同样参考经典搜索和推荐框架&#xff0c;这一章对应排序重排环节&#xff0c;…

大白话说区块链和通证

1 区块链 简单地说&#xff0c;区块链其实就像是一个不可篡改的分布式数据库&#xff0c;该分布式数据库记录了一系列交易或事件。区块链运行在至少1个以上的节点上&#xff0c;每个节点都有自己的一个分布式数据库&#xff0c;也就是分布式账本。正常情况下&#xff0c;每个节…

C 练习实例19

题目&#xff1a;一个数如果恰好等于它的因子之和&#xff0c;这个数就称为"完数"。例如61&#xff0b;2&#xff0b;3.编程找出1000以内的所有完数。 程序分析&#xff1a;请参照&#xff1a;C 练习实例14。 步骤分析&#xff1a; 写一个函数判断是否是完数 找出…

软文写作三大原则与技巧,媒介盒子分享

网络技术的快速发展带来传播环境的巨变&#xff0c;软文已经成为各大企业宣传的主要形式之一。而软文广告的核心就是其文案&#xff0c;一个好的软文不仅能够传达品牌理念&#xff0c;还能吸引用户了解品牌&#xff0c;提高转化率&#xff0c;今天媒介盒子就来和大家聊聊软文写…

二叉树的直径,力扣

目录 题目地址&#xff1a; 题目&#xff1a; 我们直接看题解吧&#xff1a; 审题目事例提示&#xff1a; 解题方法&#xff1a; 难度分析&#xff1a; 解题方法分析&#xff1a; 解题分析&#xff1a; 补充说明&#xff1a; 代码优化&#xff1a; 题目地址&#xff1a; 543. 二…

Minitab 20安装包下载及安装教程

Minitab 20下载链接&#xff1a;https://docs.qq.com/doc/DUmNYVGxtUnZkWUpk 1.选中下载好的安装包&#xff0c;鼠标右键解压到”Minitab 20“文件夹 2.选中Setup&#xff0c;鼠标右击选择“以管理员身份运行” 3.点击“下一步” 4.点击“下一步” 5.勾选我接受许可协议中的条…