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

C语言用双向链表实现单调递减(递增)队列
参考代码#includestdio.h#includestdlib.htypedefstructNode{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-numvalue;node-indexindex;node-prevNULL;node-nextNULL;if(q-size0){q-beginnode;q-endnode;q-size;return;}Node*curq-end;Node*tempNULL;//只需将循环条件改为下面的条件即可实现单调递增队列// while (cur cur-num value) {while(curcur-numvalue){if(q-size1){free(cur);q-beginNULL;q-endNULL;q-size0;curNULL;break;}tempcur-prev;free(cur);curtemp;q-size--;}if(cur){cur-nextNULL;q-endcur;}if(q-size0){q-beginnode;q-endnode;}else{q-end-nextnode;node-prevq-end;q-endnode;}q-size;}voidDequeue(MonoDeQueue*q){if(q-size0){return;}if(q-size1){free(q-begin);q-beginNULL;q-endNULL;q-size0;return;}Node*tempq-begin-next;free(q-begin);q-begintemp;q-begin-prevNULL;q-size--;}voidfreequeue(MonoDeQueue*q){if(q-size0){return;}Node*curq-begin;Node*tempNULL;while(cur){tempcur-next;free(cur);curtemp;}q-beginNULL;q-endNULL;q-size0;}voiditerator(MonoDeQueue*q){if(q-size0){printf_s(The MonoDeQueue is now empty!!!\r\n);return;}Node*curq-begin;while(cur){printf_s(%d ,cur-num);curcur-next;}printf_s(\r\n);}intmain(){intnum[]{5,4,3,2,1,7};MonoDeQueue q{0,NULL,NULL};for(inti0;isizeof(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){intsizenumsSize-k1;intindex0;int*result(int*)malloc(sizeof(int)*size);MonoDeQueue q{0,NULL,NULL,};for(inti0;ik;i){Enqueue(q,nums[i],i);}result[index]q.begin-num;for(intik;inumsSize;i){if(q.begin-indexi-k){Dequeue(q);}Enqueue(q,nums[i],i);result[index]q.begin-num;}freequeue(q);*returnSizesize;returnresult;}得到