尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

C语言用双向链表实现单调递减(递增)队列
📅 发布时间:2026/7/6 5:53:03

参考代码

#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;}

得到

相关新闻

  • AIOps 自动修复边界:能自动做,不代表该自动做
  • 如何做仿真?
  • 基于3D整数小波与超混沌系统的彩色图像加密算法详解与Matlab实现

最新新闻

  • 基于A89307与STM32L4R9AI的高性能FOC电机控制方案解析
  • ADS 2022 威尔金森功分器设计:从原理图到版图仿真的 3 个关键步骤与 1 个 Delta 参数调优
  • 终极WeMod增强指南:零成本解锁专业版功能的完整教程
  • bert-ancient-chinese 模型部署实战:Hugging Face 快速调用与本地推理 3 步指南
  • 工业4-20mA电流环与INA196电流检测设计实践
  • LTC6904与PIC18LF27K40实现高精度可编程方波发生器

日新闻

  • AI智能体安全防护框架AgentGuard:从原理到实战部署指南
  • KMX63与PIC18F26K40硬件组合及低功耗设计实践
  • 基于YOLO13改进的门体检测模型:C3k2模块与PoolingFormer技术解析

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号