news 2026/5/20 8:31:41

线性表之队列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
线性表之队列
  • 队列是限制在两端进行插入操作和删除操作的线性表
  • 允许进行存入操作的一端称为“队尾”允许进行删除操作的一端称为“队头”
  • 当线性表中没有元素时,称为“空队”
  • 特点 :先进先出(FIFO)或后进后出

  • 普通队列的缺点:
    • 出队后前面的空间无法重用,会造成“假溢出”
    • 当 sq->front > 0 且 sq->rear == N 时,虽然数组前面有空位,但队列已满
  • 在实际应用中,循环队列是更高效的选择,因为它避免了元素的移动,空间利用率更高。
  • 普通队列的主要缺点是空间浪费或需要移动元素的开销
  • 功能实现
#include<stdio.h>#include<stdlib.h>#include<string.h>sequeue*queue_create(){sequeue*sq;if((sq=(sequeue*)malloc(sizeof(sequeue)))==NULL){printf("malloc failed\n");returnNULL;}memset(sq->data,0,sizeof(sq->data));sq->front=sq->rear=0;returnsq;}intenqueue(sequeue*sq,datatype x){if(sq==NULL){printf("sq is NULL\n");return-1;}if(sq->rear==N){printf("sequeue is full\n");return-1;}sq->data[sq->rear]=x;sq->rear++;return0;}datatypedequeue(sequeue*sq){datatype ret;if(sq==NULL||sq->front==sq->rear){printf("queue is empty or NULL\n");return(datatype)-1;}ret=sq->data[sq->front];sq->front++;// 可选:当队列为空时,重置指针以重用空间if(sq->front==sq->rear){sq->front=sq->rear=0;}returnret;}intqueue_empty(sequeue*sq){if(sq==NULL){printf("sq is NULL\n");return-1;}return(sq->front==sq->rear?1:0);}intqueue_full(sequeue*sq){if(sq==NULL){printf("sq is NULL\n");return-1;}return(sq->rear==N?1:0);}intqueue_clear(sequeue*sq){if(sq==NULL){printf("sq is NULL\n");return-1;}sq->front=sq->rear=0;return0;}sequeue*queue_free(sequeue*sq){if(sq==NULL){printf("sq is NULL\n");returnNULL;}free(sq);returnNULL;}intqueue_length(sequeue*sq){if(sq==NULL){return-1;}returnsq->rear-sq->front;}
  • 头文件
#defineN100// 队列最大容量typedefintdatatype;// 数据类型typedefstruct{datatype data[N];// 存储队列元素intfront;// 队头指针intrear;// 队尾指针}sequeue;sequeue*queue_create();intenqueue(sequeue*sq,datatype x);datatypedequeue(sequeue*sq);intqueue_empty(sequeue*sq);intqueue_full(sequeue*sq);intqueue_clear(sequeue*sq);sequeue*queue_free(sequeue*sq);intqueue_length(sequeue*sq);
  • 测试文件
#include<stdio.h>#include"sequeue.h"intmain(intargc,constchar*argv[]){sequeue*sq;if((sq=queue_create())==NULL){return-1;}enqueue(sq,10);enqueue(sq,100);enqueue(sq,1000);while(!queue_empty(sq)){printf("dequeue:%d\n",dequeue(sq));}queue_free(sq);return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/18 20:38:37

10、函数与流编辑器的使用指南

函数与流编辑器的使用指南 在脚本编写的世界里,函数和流编辑器是两个强大的工具,它们能显著提升脚本的效率和可维护性。下面将详细介绍函数的使用以及流编辑器的相关内容。 函数的使用 1. 数组传递 在函数调用时,并非所有传递的值都是单个值,有时需要传递数组。以下是传…

作者头像 李华
网站建设 2026/5/16 21:33:19

交通信号仿真软件:Vistro_(2).交通信号控制基础理论

交通信号控制基础理论 1. 交通信号控制的基本概念 交通信号控制是指通过信号灯的红、黄、绿三种颜色的变化&#xff0c;来指导和管理交通流的运行。这种控制方式可以有效地减少交通拥堵&#xff0c;提高道路的通行能力&#xff0c;确保交通安全。在交通信号仿真软件中&#xff…

作者头像 李华
网站建设 2026/5/15 15:53:39

交通信号仿真软件:Vistro_(8).公交优先控制系统仿真

公交优先控制系统仿真 在交通信号仿真软件中&#xff0c;公交优先控制系统&#xff08;Bus Priority Control System, BPCS&#xff09;是一个重要的模块&#xff0c;它旨在通过优化交通信号的控制策略&#xff0c;提高公交车的通行效率&#xff0c;减少公交车的延误时间。本节…

作者头像 李华
网站建设 2026/5/16 2:34:45

交通信号仿真软件:Vistro_(9).特殊交通事件处理

特殊交通事件处理 在交通信号仿真软件中&#xff0c;处理特殊交通事件是模拟真实交通环境的关键部分。特殊交通事件包括交通事故、临时交通管制、突发事件&#xff08;如天气变化&#xff09;等&#xff0c;这些事件会对交通流量和信号控制产生重要影响。本节将详细介绍如何在仿…

作者头像 李华
网站建设 2026/5/19 0:22:52

27、工业信息物理系统在医疗与伦理领域的应用与挑战

工业信息物理系统在医疗与伦理领域的应用与挑战 1. 信息物理系统在医疗领域的应用 信息物理系统(CPS)在医疗领域的应用(HCPS)为医疗生产带来了新的可能。CPS能够尽可能真实地模拟现实世界,具备预测未来行为的能力,例如在对患者进行治疗前进行“计算机模拟”测试,还能预…

作者头像 李华
网站建设 2026/5/15 1:55:04

49、Linux 系统安全与性能优化全解析

Linux 系统安全与性能优化全解析 1. 服务状态与安全风险 在 Linux 系统中,众多服务的运行状态各异,可能存在潜在的安全漏洞。以下是部分服务的当前状态: | 服务 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | | — | — | — | — | — | — | — | — | | ypserv | off | off | off …

作者头像 李华