操作系统原理与实验——实验一队列

news2025/3/13 0:14:41

实验指南

运行环境:

Dev c++

算法思想: 

队列顺序存储用链表来表示,用front指针表示队首,用rear指针表示队尾,实现队列的几个基本的操作。

核心数据结构:

typedef int datatype;

typedef struct

{

    datatype a[MAXSIZE];

    int front;

    int rear;

}sequence_queue;

程序主体框架:

//函数名:init   参数:sequence_queue * sq

void init(sequence_queue * sq)

{

    //功能: 队列初始化

}

//函数名:empty   参数:sequence_queue * sq

bool empty(sequence_queue * sq)

{

    //功能: 判断队列是否为空

}

//函数名:full   参数:sequence_queue * sq

bool full(sequence_queue * sq)

{

    //功能: 判断队列是否为满

}

//函数名:display   参数:sequence_queue * sq

void display(sequence_queue * sq)

{

    //功能: 打印队列

}

//函数名:dequeue   参数:sequence_queue * sq

datatype dequeue(sequence_queue * sq)

{

    //功能: 出队

}

//函数名:insertqueue   参数:sequence_queue * sq, datatype x

void insertqueue(sequence_queue * sq, datatype x)

{

    //功能: 入队

}

//函数名:clearqueue  参数:sequence_queue * sq

void clearqueue(sequence_queue * sq)

{

    //功能: 清空队列

}

int main()

{

    datatype x;

    sequence_queue* sq = (sequence_queue*)malloc(sizeof(sequence_queue));

    init(sq);

    int n;

    printf("请输入需要创建队列的个数:");

    scanf("%d", &n);

    for(int i = 1; i <= n; ++ i)

    {

        printf("请输入需要插入的值:");

        scanf("%d", &x);

        insertqueue(sq, x);

    }

    bool flag;

    do

    {

        printf("是否进行出队操作(1: 是, 0: 否):");

        scanf("%d", &flag);

        if(flag)

        {

            x = dequeue(sq);

            printf("出队的元素为: %d\n", x);

        }

        display(sq);

    }while(flag);

    do

    {

        printf("是否进行插入操作(1: 是, 0: 否):");

        scanf("%d", &flag);

        if(flag)

        {

            printf("请输入需要插入的值:");

            scanf("%d", &x);

            insertqueue(sq, x);

        }

        display(sq);

    }while(flag);

   

    clearqueue(sq);

   

    return 0;

}

测试用例:

5

2

5

2

9

3

1

2

0

1

5

0

关键代码

#include<stdio.h>
#include <malloc.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct
{
	datatype a[MAXSIZE];
	int front;
	int rear;
 } sequence_queue;
 void init (sequence_queue*sq)
 {
 	for(int i=0;i<MAXSIZE;i++)
 	sq->a[i]=0;
 	sq->front=0;
 	sq->rear=0;
 }
 bool empty (sequence_queue*sq)
 {
 	if(sq->front==sq->rear)
 	return true;
 	else
 	return false;
 }
 bool full (sequence_queue*sq)
 {
 	if(sq->rear==MAXSIZE)
 	return true;
 	else
 	return false;
 }
 void display (sequence_queue*sq)
 {
 	if(empty(sq))
 	return ;
 	else
 	{
 		for(int i=sq->front;i<sq->rear;i++)
 			printf("%d ",sq->a[i]);
	}
 }
 datatype dequeue (sequence_queue*sq)
 {
 	int x;
 	if(empty(sq))
 	return 0;
 	else
 	{
 		x=sq->a[sq->front];
 		sq->front++;
	 }
	 return x;
 }
 void insertqueue(sequence_queue*sq,datatype x)
 {
 	if(full(sq))
 	return ;
 	sq->a[sq->rear]=x;
 	sq->rear++;
 }
 void cleanqueue(sequence_queue*sq)
 {
 	printf("\n清空队列"); 
 	while(!empty(sq))
 	{
 		printf("%d ",dequeue(sq));
	 }
	 return;
  }
   int main()
   {
   	datatype x;
   	sequence_queue*sq=(sequence_queue*)malloc(sizeof(sequence_queue));
   	init(sq);
   	int n;
   	printf("请输入需要创建队列的个数:");
   	scanf("%d",&n);
   	for(int i=0;i<n;++i)
   	{
   		printf("请输入需要插入的值:");
   		scanf("%d",&x);
   		insertqueue(sq,x);
	}
	bool flag;
	do
	{
		printf("是否进行出队操作(1:是,0:否):");
		scanf("%d",&flag);
		if(flag&&empty(sq)==false)
		{
			x = dequeue(sq);
			printf("出队的元素为:%d\n",x);
		}
		if(empty(sq))
		{
			printf("队列为空");
			break;
		}
		display(sq);
	}while(flag);
	cleanqueue(sq);
	return 0;
   }

运行结果

实验总结

(1)在出队时,主程序不管队列中是否有元素,都会返回数组中原有的值。改进方法是在输出要出队元素前先判断队列是否为空,如果为空则显示队列中没有元素,反之则出队。

(2)在插入元素时,如果用户所要插入的元素个数大于给定的数组元素,则超过数组大小的元素数据会丢失。改进方法是当用户输入要创建的队列元素个数时,对其大小进行判断,如果不符合,则让用户重新输入所要创建的队列的元素个数。

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

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

相关文章

计算机网络——15套接字编程

套接字编程 Socket编程 Socket编程&#xff1a;应用进程使用传输层提供的服务才能够交换报文&#xff0c;实现应用协议&#xff0c;实现应用 TCP/IP&#xff1a;应用进程使用Socket API访问传输服务 地点&#xff1a;界面上的SAP 方式&#xff1a;Socket API 目标&#xff1…

【精选】Java面向对象进阶——接口细节:成员特点和接口的各种关系

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

STM32学习笔记(七) —— DMA传输(MTM)

DMA&#xff0c;全称是Direct Memory Access&#xff08;直接内存访问&#xff09;。可以在存储器和存储器之间或者外设和存储器之间传输数据&#xff0c;而不需要CPU的干预&#xff0c;这样可以节省CPU的资源&#xff0c;提高工作效率。 1.功能框图 STM32F103RCT6有两个DMA控…

怎样让MCU/SFU视频会议ovmedia 接入GB28281监控视频参会互动

在国内视频应用对GB监控接入是常规操作&#xff0c;很多系统需要接入监控视频交互处理。我们以ovmedia视频会议为例做一个接入互动。 GB28181协议在流媒体系统较为普及&#xff0c;我们以开源SRS系统对接监控端再接入会议&#xff08;也可以用商用GB流平台&#xff0c;操作基本…

嵌入式——EEPROM(AT24C02)

目录 一、初识AT24C02 1. 介绍 2. 引脚功能 补&#xff1a; 二、AT24C02组成 1. 存储结构 2. AT24C02通讯地址 3. AT24C02寻址方式 &#xff08;1&#xff09;芯片寻址 &#xff08;2&#xff09;片内子地址寻址 三、AT24C02读写时序 1. 写操作 &#xff08;1&…

C语言——从头开始——深入理解指针(1)

一.内存和地址 我们知道计算上CPU&#xff08;中央处理器&#xff09;在处理数据的时候&#xff0c;是通过地址总线把需要的数据从内存中读取的&#xff0c;后通过数据总线把处理后的数据放回内存中。如下图所示&#xff1a; 计算机把内存划分为⼀个个的内存单元&#xff0c;每…

人机交互新研究:MIT开发了结合脑电和眼电的新式眼镜,与机器狗交互

还记得之前的AI读心术吗&#xff1f;最近&#xff0c;「心想事成」的能力再次进化&#xff0c; ——人类可以通过自己的想法直接控制机器人了&#xff01; 来自麻省理工的研究人员发表了Ddog项目&#xff0c;通过自己开发的脑机接口&#xff08;BCI&#xff09;设备&#xff…

16.Qt 工具栏生成

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 1. 界面添加 2. 信号槽 功能实现 参考&#xff1a; 前言&#xff1a; 基于QMainWindow&#xff0c;生成菜单下面的工具栏&#xff0c;可以当作菜单功能的快捷键&#xff0c;也可以完成新的功能 直接在UI文件中…

django中事务和锁

目录 一&#xff1a;事务&#xff08;Transactions&#xff09; 二&#xff1a;锁 在Django中&#xff0c;事务和锁是数据库操作中的两个重要概念&#xff0c;它们用于确保数据的完整性和一致性。下面我将分别解释这两个概念在Django中的应用。 一&#xff1a;事务&#xff…

值得收藏的的适用于 Windows 11 的免费数据恢复软件榜单

终于要说到Windows 11了&#xff0c;有太多令人惊叹的功能&#xff0c;让人跃跃欲试。但是&#xff0c;在升级到 Windows 11 或使用 Windows 11 时&#xff0c;人们可能会因计算机问题而导致文件被删除或丢失。这就是为什么需要 Windows 11 的免费文件恢复的原因。这是适用于 W…

vscode右键菜单栏功能说明

本文主要介绍在vscode中的python代码文件中&#xff0c;单击鼠标右键出现的菜单栏功能。部分功能可能与安装插件相关&#xff0c;主要用于个人查阅。 单击右键菜单栏如下&#xff1a; GO to xx类型命令 “Go to Definition”、“Go to Declaration”、"Go to Type Defin…

相机图像质量研究(31)常见问题总结:图像处理对成像的影响--图像差

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

什么原因导致百度百科建立一直审核不通过?

百科词条对网络营销实在是太重要了&#xff0c;不管是个人还是企业想在网上开展业务&#xff0c;都必要建立百科词条。自己动手编辑百科词条&#xff0c;搞个几十次也审核不过的情况比比皆是。 为什么百度百科总是审核不通过&#xff1f;百度官方发表过声明表示百度百科词条是人…

租用一个服务器需要多少钱?2024阿里云新版报价

2024年最新阿里云服务器租用费用优惠价格表&#xff0c;轻量2核2G3M带宽轻量服务器一年61元&#xff0c;折合5元1个月&#xff0c;新老用户同享99元一年服务器&#xff0c;2核4G5M服务器ECS优惠价199元一年&#xff0c;2核4G4M轻量服务器165元一年&#xff0c;2核4G服务器30元3…

深入剖析跨域请求发送两次的原因及解决方案(下)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(7)特征工程的基本方法

今天来学习特征工程的基本方法。 基本方法包括&#xff1a;特征选择&#xff08;Feature Selection&#xff09;、特征提取&#xff08;Feature Extraction&#xff09;和特征构建&#xff08;Feature Construction&#xff09;。 一、特征选择&#xff08;Feature Selection&a…

基于飞腾ARM+FPGA国产化计算模块联合解决方案

联合解决方案概述 随着特殊领域电子信息系统对自主创新需求的日益提升&#xff0c;需不断开展国产抗恶劣环境计算整机及模块产 品的研制和升级。特殊领域电子信息系统的自主创新&#xff0c;是指依靠自身技术手段和安全机制&#xff0c;实现信息系统从硬 件到软件的自主研发…

计算机服务器中了_locked勒索病毒怎么办?Encrypted勒索病毒解密数据恢复

随着网络技术的不断发展&#xff0c;数字化办公已经成为企业生产运营的根本&#xff0c;对于企业来说&#xff0c;数据至关重要&#xff0c;但网络威胁无处不在&#xff0c;近期&#xff0c;云天数据恢复中心接到很多企业的求助&#xff0c;企业的计算机服务器遭到了_locked勒索…

Codeforces Round 926 (Div. 2) C. Sasha and the Casino (Java)

Codeforces Round 926 (Div. 2) CC. Sasha and the Casino (Java) 比赛链接&#xff1a;Codeforces Round 926 (Div. 2) C题传送门&#xff1a;C. Sasha and the Casino 题目&#xff1a;C. Sasha and the Casino **Example ** input 2 1 7 2 1 1 2 3 15 3 3 6 4 4 5 5 4 7…

⭐北邮复试刷题429. N 叉树的层序遍历(按层入队出队BFS)

429. N 叉树的层序遍历 给定一个 N 叉树&#xff0c;返回其节点值的层序遍历。&#xff08;即从左到右&#xff0c;逐层遍历&#xff09;。 树的序列化输入是用层序遍历&#xff0c;每组子节点都由 null 值分隔&#xff08;参见示例&#xff09;。 示例 1&#xff1a;输入&a…