数据结构课程设计选做(三)---公共钥匙盒(线性表,栈,队列)

news2024/10/6 12:28:17
2.3.1 题目内容
2.3.1-A [问题描述]

有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家。每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中。

钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙。一串钥匙没有固定的悬挂位置,但钥匙上有标识,所以老师们不会弄混钥匙。

每次取钥匙的时候,老师们都会找到自己所需要的钥匙将其取走,而不会移动其他钥匙。每次还钥匙的时候,还钥匙的老师会找到最左边的空的挂钩,将钥匙挂在这个挂钩上。如果有多位老师还钥匙,则他们按钥匙编号从小到大的顺序还。如果同一时刻既有老师还钥匙又有老师取钥匙,则老师们会先将钥匙全还回去再取出。

今天开始的时候钥匙是按编号从小到大的顺序放在钥匙盒里的。有K位老师要上课,给出每位老师所需要的钥匙、开始上课的时间和上课的时长,假设下课时间就是还钥匙时间,请问最终钥匙盒里面钥匙的顺序是怎样的?

2.3.1-B [基本要求]

(1)输入格式

输入的第一行包含两个整数N, K。

接下来K行,每行三个整数w, s, c,分别表示一位老师要使用的钥匙编号、开始

课的时间和上课的时长。可能有多位老师使用同一把钥匙,但是老师使用钥匙的时间

不会重叠。

保证输入数据满足输入格式,你不用检查数据合法性。

2)输出格式

输出一行,包含N个整数,相邻整数间用一个空格分隔,依次表示每个挂钩上挂的

钥匙编号。

样例输入

5 2

4 3 3

2 2 7

样例输出

1 4 3 2 5

样例说明

  第一位老师从时刻3开始使用4号教室的钥匙,使用3单位时间,所以在时刻6还钥匙。第二位老师从时刻2开始使用钥匙,使用7单位时间,所以在时刻9还钥匙。

  每个关键时刻后的钥匙状态如下(X表示空):

  时刻2后为1X345;

  时刻3后为1X3X5;

  时刻6后为143X5;

  时刻9后为14325。

课程设计要求:

(1)要求从文本文件中输入;

(2)根据时间进程,将取走钥匙和归还钥匙分别视为事件,放入队列中,然后通过每个事件的先后发生对钥匙盒的状态进行变更;

(3)严格按照要求的输入输出格式进行数据的输入、输出(训练CSP考试中的格式化输入输出的正确性);

(4)选做:通过图形界面来显示钥匙盒的即时状态,以及事件队列的状态。

2.3.2 算法思想

定义了一个结构体 Node,用于存储借还钥匙的信息,包括钥匙编号、时间和借还标识。

自定义了一个比较函数 cmp,用于对借还钥匙的信息进行排序。排序的规则是首先按时间早的优先,然后是还钥匙优先,最后是编号小的优先。从文件中读取钥匙盒大小 N 和操作次数 K。

初始化了一个数组 num,用于存储钥匙盒中的钥匙情况,下标表示钥匙位置,值表示钥匙编号。通过循环,读取每次操作的借还钥匙信息,并将这些信息存储在结构体数组 node 中,同时对应的操作次数进行递减。对存储的借还钥匙信息进行排序,排序规则使用了自定义的比较函数 cmp。遍历排序后的借还钥匙信息,根据借还标识将钥匙放入或取出钥匙盒中的对应位置。最后输出最终的钥匙盒情况。

2.3.3 源代码 [共87]
#include<iostream>
#include<algorithm>
#include<fstream>
using namespace std;

int num[1005]; // 用于存储钥匙盒中的钥匙情况,下标表示钥匙位置,值表示钥匙编号

struct Node
{
    int key; // 钥匙编号
    int time; // 时间
    int sign; // 借还标识,借为0,还为1
} node[20002]; // 存储借还钥匙的信息

// 自定义比较函数,用于排序
bool cmp(Node a, Node b)
{
    if(a.time != b.time)
        return a.time < b.time; // 时间早的优先
    else{
        if(a.sign != b.sign) 
            return a.sign > b.sign; // 还优先
        else 
            return a.key < b.key; // 编号小优先
    }
}

int main()
{
	ifstream a;
	a.open("data.txt",ios::in);
	if(a.eof())
	{
		cout<<"打开文件失败!"<<endl;
		a.close();
		exit(0);
	}
    int N, K;
    a>> N >> K; // 输入钥匙盒大小和操作次数
    for(int i = 1; i <= N; i++) 
        num[i] = i; // 初始化钥匙盒

    int n = 0;
    while(K--)
	{
        int w,s,c;
        //cin >> w >> s >> c; // 输入借还钥匙的信息
        a>>w>>s>>c;
        // 存储借钥匙的信息
        node[n].key = w;
        node[n].time = s;
        node[n++].sign = 0;//0代表借 
        // 存储还钥匙的信息
        node[n].key = w;
        node[n].time = s + c;
        node[n++].sign = 1;//1代表还 
    }
    sort(node, node + n, cmp); // 对借还钥匙的信息进行排序

    for(int i = 0; i < n; i++)
	{
        if(node[i].sign)
		{ // 还钥匙
            for(int j = 1; j <= N; j++)
			{
                if(!num[j])
				{
                    num[j] = node[i].key; // 找到空位,放入还的钥匙
                    break;
                }    
            }   
        }
        else
		{ // 借钥匙
            for(int j = 1; j <= N; j++)
			{
                if(num[j] == node[i].key)
                    num[j] = 0; // 找到对应的钥匙,置为空位
            }   
        } 
    }
    
    for(int i = 1; i <= N; i++)
        cout << num[i] << " "; // 输出最终的钥匙盒情况
    a.close();
    return 0;
}
2.3.4 测试数据与运行结果
2.3.4-A 测试数据

2.3.4-B 运行结果

源码地址:GeekclubC/Course-Design-of-Data-Structure: 用C++完成的数据结构课程设计 (github.com)

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

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

相关文章

FJSP:袋鼠群优化(Kangaroo Swarm Optimization ,KSO)算法求解柔性作业车间调度问题(FJSP),提供MATLAB代码

一、柔性作业车间调度问题 柔性作业车间调度问题&#xff08;Flexible Job Shop Scheduling Problem&#xff0c;FJSP&#xff09;&#xff0c;是一种经典的组合优化问题。在FJSP问题中&#xff0c;有多个作业需要在多个机器上进行加工&#xff0c;每个作业由一系列工序组成&a…

AliyunCTF 2024 - BadApple

文章目录 前言环境搭建漏洞分析漏洞利用参考 前言 本文首发于看雪论坛 https://bbs.kanxue.com/thread-281291.htm 依稀记得那晚被阿里CTF支配的恐惧&#xff0c;今年的阿里CTF笔者就做了一道签到PWN题&#xff0c;当时也是下定决心要学习 jsc pwn 然后复现这道 BadApple 题目…

Paper Reading: MixTeacher:半监督目标检测中利用混合尺度教师挖掘有前景的标签

目录 简介目标/动机工作重点方法训练 实验总结 简介 题目&#xff1a;《MixTeacher: Mining Promising Labels with Mixed Scale Teacher for Semi-Supervised Object Detection》&#xff0c; CVPR 2023 日期&#xff1a;2023.3.16 单位&#xff1a;腾讯&#xff0c;上海交…

Upload-labs(Pass-14 - Pass-16)

Pass-14 &#xff08;图片马&#xff0c;判断文件类型&#xff09; 图片的格式在防护中通常是不会使用后缀进行判断的依据&#xff0c;文件头是文件开头的一段二进制码&#xff0c;不同类型的图片也就会有不同的二进制头。   JPEG (jpg)&#xff0c;文件头&#xff1a;FF D…

【数据挖掘】实验6:初级绘图

实验6&#xff1a;初级绘图 一&#xff1a;实验目的与要求 1&#xff1a;了解R语言中各种图形元素的添加方法&#xff0c;并能够灵活应用这些元素。 2&#xff1a;了解R语言中的各种图形函数&#xff0c;掌握常见图形的绘制方法。 二&#xff1a;实验内容 【直方图】 Eg.1&…

【数据结构】4.List的介绍

目录 1.什么是List 2.常见接口介绍 3.List的使用 1.什么是List 在集合框架中&#xff0c;List是一个接口&#xff0c;继承自Collection。 Collection也是一个接口&#xff0c;该接口中规范了后序容器中常用的一些方法&#xff0c;具体如下&#xff1a; Iterable也是一个接口…

C语言100道练习题打卡(1)

1 有1&#xff0c;2&#xff0c;3&#xff0c;4四个数字&#xff0c;能组成多少个互不相同且不重复的三位数&#xff0c;都是多少 #include<stdio.h> //有1&#xff0c;2&#xff0c;3&#xff0c;4四个数字&#xff0c;能组成多少个互不相同且不重复的三位数&#xff…

JCR1区局部强化优化器(PRO),原理详解,MATLAB代码免费获取

局部强化优化器&#xff08;Partial Reinforcement Optimizer, PRO&#xff09;代表了进化计算领域的一项创新突破&#xff0c;它是一种全新设计的进化优化算法。该算法的开发灵感来源于心理学中的进化学习和训练理念&#xff0c;特指为一个被称为局部强化效应&#xff08;Part…

特征匹配方法总结梳理

特征匹配在视觉定位、同时定位和映射(SLAM)、图像拼接等方面都有应用 Proj:202404 CMC-R(R.W.--Reference) 南京 河海大学 资助丰富Fundamental Research Funds of China for the Central Universities, Grant/Award Number: B230205048; Jiangsu Higher Education Reform …

day10 | 栈与队列 part-2 (Go) | 20 有效的括号、1047 删除字符串中的所有相邻重复项、150 逆波兰表达式求值

今日任务 20 有效的括号 (题目: . - 力扣&#xff08;LeetCode&#xff09;)1047 删除字符串中的所有相邻重复项 (题目: . - 力扣&#xff08;LeetCode&#xff09;)150 逆波兰表达式求值 (题目: . - 力扣&#xff08;LeetCode&#xff09;) 20 有效的括号 题目: . - 力扣&…

【QT入门】Qt自定义控件与样式设计之鼠标相对、绝对位置、窗口位置、控件位置

往期回顾 【QT入门】 Qt自定义控件与样式设计之QSlider用法及qss-CSDN博客 【QT入门】Qt自定义控件与样式设计之qss的加载方式-CSDN博客 【QT入门】Qt自定义控件与样式设计之控件提升与自定义控件-CSDN博客 【QT入门】Qt自定义控件与样式设计之鼠标相对、绝对位置、窗口位置、控…

YOLOV5 + 双目相机实现三维测距(新版本)

文章目录 YOLOV5 双目相机实现三维测距&#xff08;新版本&#xff09;1. 项目流程2. 测距原理3. 操作步骤和代码解析4. 实时检测5. 训练6. 源码下载 YOLOV5 双目相机实现三维测距&#xff08;新版本&#xff09; 本文主要是对此篇文章做一些改进&#xff0c;以及解释读者在…

MySQL 实例employee表综合查询

目录 表关系图&#xff1a; 例题&#xff1a; 1.查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。 2.列出所有员工的姓名及其直接上级的姓名。 3.列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。 4.列出部门名称和这些部门的员工信…

【进阶六】Python实现SDVRPTW常见求解算法——离散粒子群算法(DPSO)

基于python语言&#xff0c;采用经典离散粒子群算法&#xff08;DPSO&#xff09;对 带硬时间窗的需求拆分车辆路径规划问题&#xff08;SDVRPTW&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4. …

AI大模型探索之路-提升篇2:一文掌握AI大模型的核心-注意力机制

目录 前言 一、注意力机制简介 二、注意力机制的工作原理 三、注意力机制的变体 1、自注意力&#xff08;Self-Attention&#xff09; 2、双向注意力&#xff08;Bidirectional Attention&#xff09; 3、多头注意力&#xff08;Multi-Head Attention&#xff09; ​4、…

缺失msvcr110.dll要怎么处理?快捷的修复msvcr110.dll方法

当你在使用电脑进行工作或娱乐时&#xff0c;可能会突然遇到一个错误提示&#xff1a;“程序无法启动&#xff0c;因为电脑中缺失msvcr110.dll”。这样的情况不仅会打断你的活动&#xff0c;还可能带来一定程度的不便。面对这个在Windows操作系统中相对常见的问题&#xff0c;其…

执行npm命令一直出现sill idealTree buildDeps怎么办?

一、问题 今天在运行npm时候一直出项sill idealTree buildDeps问题 二、 解决 1、网上查了一下&#xff0c;有网友说先删除用户界面下的npmrc文件&#xff08;注意一定是用户C:\Users\{账户}\下的.npmrc文件下不是nodejs里面&#xff09;&#xff0c;进入到对应目录下&#x…

汇编语言知识点整理(应付考试专用,想学习找其他的)

1 基础知识 1.1 信息在计算机内部的表示和存储 1.1.1 信息存储的基本概念 信息在计算机内部是以二进制数据的形式在存储器中存取的。介绍两个基本概念&#xff1a; 位&#xff08;Bit&#xff09; 计算机中最小的数据单位&#xff0c;一位有0、1两状态。Bit是计算机中最小…

【opencv】示例-stiching.cpp 图像拼接

#include "opencv2/imgcodecs.hpp" // 导入opencv图像编码功能库 #include "opencv2/highgui.hpp" // 导入opencv高层用户界面功能库 #include "opencv2/stitching.hpp" // 导入opencv图像拼接功能库#include <iostream> // 导入输入输出…

聚观早报 | 哪吒L上市定档;iPhone 16最新高清渲染图

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 4月10日消息 哪吒L上市定档 iPhone 16最新渲染图 华为太空表与问界M9联动 蔚来万里长城加电风景线正式贯通 Red…