news 2026/5/7 23:06:44

线性表之队列

作者头像

张小明

前端开发工程师

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/5 11:56:23

18、工业人机物理系统集成的数字化与控制评估

工业人机物理系统集成的数字化与控制评估 1. 自下而上评估阶段概述 在自上而下设计阶段结束后,自下而上阶段开始对设计好的人机工业物理系统(HICPS)进行评估。“工程”方法常被错误地等同于设计阶段的“实施”部分,即自下而上的评估阶段,此阶段大多是“技术性”的,当工…

作者头像 李华
网站建设 2026/5/6 19:02:29

45、反垃圾邮件措施全解析

反垃圾邮件措施全解析 1. 垃圾邮件问题概述 在计算机领域,垃圾邮件指的是那些无用的电子邮件,比如可疑的防脱发疗法广告、非法的金字塔骗局,以及用你不懂的语言编写的神秘信息等。对于电子邮件管理员来说,垃圾邮件是一个严重的问题,它主要涉及两个方面:一是防止系统被用…

作者头像 李华
网站建设 2026/4/30 23:52:55

泉盛UV-K5固件升级终极指南:LOSEHU固件5分钟快速上手

想让你的泉盛UV-K5/K6对讲机从"能用"升级到"好用"吗&#xff1f;LOSEHU固件正是你需要的魔法钥匙&#xff01;这款开源固件为原厂设备注入了全新活力&#xff0c;让业余无线电爱好者也能享受专业级功能。今天&#xff0c;我将带你快速解锁这款固件的全部潜…

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

Vue todoList案例 优化之本地存储

测试代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title> </head> <body><h1>浏览器本地存储案例</h1><button onclick"saveData()">…

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

Java计算机毕设之基于SpringBoot高校大学生评奖评优系统的设计与实现基于springboot高校学生奖学金评定系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/6 16:29:15

Java计算机毕设之基于springboot高校洗浴管理系统基于Java+Springboot高校洗浴管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华