news 2026/6/10 14:25:59

线性表之队列

作者头像

张小明

前端开发工程师

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/6/10 14:53:41

6、深入探索脚本条件判断与代码片段创建

深入探索脚本条件判断与代码片段创建 1. 条件判断基础操作 在脚本编写中,条件判断是实现脚本逻辑的关键部分。我们可以使用 JG 语句来检查文件和目录,以下是一个检查目录是否存在的示例: #!/bin/bash mydir=~/mydir if [ -d "$mydir" ]; thenecho "Dir…

作者头像 李华
网站建设 2026/6/10 14:53:19

16、利用AWK和Python进行数据处理与脚本编写

利用AWK和Python进行数据处理与脚本编写 1. 使用AWK优化lastlog输出 在处理 lastlog 命令的输出时,我们可能只对部分数据感兴趣,比如用户名和最后登录时间。AWK可以作为强大的数据过滤器,实现水平和垂直的数据过滤。 1.1 水平过滤行 通过将 lastlog 的输出通过管道传…

作者头像 李华
网站建设 2026/6/9 16:49:09

17、Python:替代Bash脚本的绝佳选择

Python:替代Bash脚本的绝佳选择 1. 重要的空格概念 Python与大多数其他语言的一个主要区别在于额外的空格是有意义的。代码的缩进级别定义了它所属的代码块。在Python中,我们不使用花括号或 do 和 done 关键字来定义代码块,而是使用缩进。如果我们使用两个或四个空格甚…

作者头像 李华
网站建设 2026/6/8 12:17:30

ComfyUI与Skopeo镜像复制集成:跨仓库迁移

ComfyUI与Skopeo镜像复制集成&#xff1a;跨仓库迁移 在AI生成内容&#xff08;AIGC&#xff09;技术迅猛发展的今天&#xff0c;企业对AI系统的可复现性、部署效率和运维自动化提出了前所未有的高要求。一个典型的挑战是&#xff1a;如何确保开发环境中精心调优的图像生成流程…

作者头像 李华
网站建设 2026/6/9 13:58:52

AI智能体:未来人机协作的核心技术解析

引言&#xff1a;从被动响应到主动协作的AI演进 传统AI系统大多是“问-答”模式&#xff1a;用户输入问题&#xff0c;系统输出答案。但现代AI智能体(AI Agents)正在改变这一范式。它们不仅能够理解复杂指令&#xff0c;还能主动规划、执行多步骤任务&#xff0c;并根据环境反…

作者头像 李华
网站建设 2026/6/10 4:41:22

37、Linux网络服务配置与使用指南

Linux网络服务配置与使用指南 1. NFS挂载 NFS(Network File System)是一种用于在不同计算机之间共享文件系统的协议。要挂载NFS共享,需指定服务器名、共享目录路径和本地挂载点。例如,使用以下命令将 birch 服务器上的 /home 共享挂载到客户端的 /shared/homes 目录…

作者头像 李华