当前位置: 首页 > news >正文

C语言用双向链表实现单调递减(递增)队列

参考代码

#include<stdio.h>#include<stdlib.h>typedefstructNode{intnum;intindex;structNode*prev;structNode*next;}Node;typedefstructMonoDeQueue{intsize;Node*begin;Node*end;}MonoDeQueue;voidEnqueue(MonoDeQueue*q,intvalue,intindex){Node*node=(Node*)malloc(sizeof(Node));node->num=value;node->index=index;node->prev=NULL;node->next=NULL;if(q->size==0){q->begin=node;q->end=node;q->size++;return;}Node*cur=q->end;Node*temp=NULL;//只需将循环条件改为下面的条件,即可实现单调递增队列// while (cur && cur->num >= value) {while(cur&&cur->num<=value){if(q->size==1){free(cur);q->begin=NULL;q->end=NULL;q->size=0;cur=NULL;break;}temp=cur->prev;free(cur);cur=temp;q->size--;}if(cur){cur->next=NULL;q->end=cur;}if(q->size==0){q->begin=node;q->end=node;}else{q->end->next=node;node->prev=q->end;q->end=node;}q->size++;}voidDequeue(MonoDeQueue*q){if(q->size==0){return;}if(q->size==1){free(q->begin);q->begin=NULL;q->end=NULL;q->size=0;return;}Node*temp=q->begin->next;free(q->begin);q->begin=temp;q->begin->prev=NULL;q->size--;}voidfreequeue(MonoDeQueue*q){if(q->size==0){return;}Node*cur=q->begin;Node*temp=NULL;while(cur){temp=cur->next;free(cur);cur=temp;}q->begin=NULL;q->end=NULL;q->size=0;}voiditerator(MonoDeQueue*q){if(q->size==0){printf_s("The MonoDeQueue is now empty!!!\r\n");return;}Node*cur=q->begin;while(cur){printf_s("%d ",cur->num);cur=cur->next;}printf_s("\r\n");}intmain(){intnum[]={5,4,3,2,1,7};MonoDeQueue q={0,NULL,NULL};for(inti=0;i<sizeof(num)/sizeof(num[0]);++i){Enqueue(&q,num[i]);}iterator(&q);clear(&q);iterator(&q);return0;}

运行结果

利用上述实现的单调递减队列求解Leetcode 239. 滑动窗口最大值

int*maxSlidingWindow(int*nums,intnumsSize,intk,int*returnSize){intsize=numsSize-k+1;intindex=0;int*result=(int*)malloc(sizeof(int)*size);MonoDeQueue q={0,NULL,NULL,};for(inti=0;i<k;i++){Enqueue(&q,nums[i],i);}result[index++]=q.begin->num;for(inti=k;i<numsSize;i++){if(q.begin->index==i-k){Dequeue(&q);}Enqueue(&q,nums[i],i);result[index++]=q.begin->num;}freequeue(&q);*returnSize=size;returnresult;}

得到

http://www.jsqmd.com/news/1132896/

相关文章:

  • Layerdivider:如何用AI在5分钟内将任何插画转换为可编辑PSD图层
  • 从零构建搜索引擎:Python 异步爬虫 + 倒排索引 + Sanic 前后端实战
  • 2026论文全流程终极榜单:10款降AI率平台,查重降重+降AIGC一次通关
  • Linux 5.15 网口驱动调试:从 PHY 初始化到 DMA 异常的 5 步硬件排查法
  • 暗黑破坏神2存档修改终极指南:免费Web编辑器d2s-editor完全解析
  • AIOps 自动修复边界:能自动做,不代表该自动做
  • 如何做仿真?
  • 061、自定义数据集训练:如何将自己的图像和视频数据用于超分模型
  • 5分钟解锁Wand高级功能:开源增强工具完整指南
  • Spek频谱分析器终极指南:5分钟掌握音频可视化分析完整教程
  • 人体骨骼时序动态感知模型 头肢活跃度量化+实时情绪推演核心算法专项解析
  • 3分钟免费解锁B站缓存视频:m4s-converter终极完整指南
  • 130、共享卷积 Head:分类和回归分支共享前三层卷积的参数共享策略与效果
  • 基于3D整数小波与超混沌系统的彩色图像加密算法详解与Matlab实现
  • 机械专业不想干纯设计,可以转什么方向?2026年热门转型指南
  • 本地化代码生成AI部署指南:从环境配置到API集成实践
  • 使用 Oracle EBS 的中国企业Oracle EBS在中国金融、电信、能源等行业有大量深度用户,尤其在银行和保险行业占据主导地位。金融行业(银行)这是Oracle EBS在中国最集中的用户
  • RIP实验需求配置
  • ALVR无线VR串流:释放你的PC VR游戏,体验无拘无束的虚拟现实
  • Windows 下Maven安装配置(本地仓库配置)
  • E-Ink Launcher:为电子阅读器打造的极致省电Android启动器
  • 暑假40天极速学Python!大学生零基础保姆级上岸路线(从入门到可做项目)
  • SMUDebugTool:锐龙处理器性能调试的终极指南,轻松实现超频优化与系统监控
  • Cangaroo:当袋鼠跳跃在CAN总线上的开源奇迹
  • 真原生,非外挂:Agentic CRM 时代,什么才是真正的 AI 原生CRM
  • 中国企业里用 Oracle EBS​ 和 SAP​ 的都是各自领域的头部大户,但两边的“基本盘“不太一样——Oracle EBS 在电信/金融/航空/钢铁偏强,SAP 在制造业/汽车/能源/央企更占主
  • C++之libCurl实现HTTP请求
  • Palworld存档转换工具:三步实现游戏数据自由编辑
  • Linux应急响应实战指南:从入侵检测到系统加固的完整流程
  • YOLO目标检测从入门到精通:核心原理、版本演进与实战部署指南