动态实时获取当前栈中的最大值元素(最小值同理)。
【设计思路】
getMax(获取栈内当前最大元素)的设计,假设入栈元素:
主栈:1 3 2 7 9 6
由于栈后进先出,只需要将新入的更大元素压入辅助栈:
辅助栈:1 3 7 9
当前最大值:9;
pop,6出栈,最大值依旧是9;
pop,9出栈,此时辅助也跟着出栈,于是,当前栈内最大值:7
。。。
原理:因栈的性质后进先出,后续有更大的元素压入辅助栈,辅助栈内元素有序;从后出栈,就保证了辅助栈反序出栈,辅助栈出栈的是最大值,次大值顺序递补。
典型的以空间换时间。
【代码实现】
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>
#include <assert.h>
#include "dlist.h"
#define container_of(ptr, type, member) (type*)((char*)ptr - offsetof(type, member))
AdtDList_t g_st_main; /* main stack */
AdtDList_t g_st_assist; /* assist stack */
typedef struct node_d_ { // 业务数据DS
AdtDList_t dlink;
int val;
} node_d;
typedef struct node_m_ { // 辅助栈专用DS
AdtDList_t dlink;
node_d *index; // 存储业务数据的地址
} node_m;
/* data: node_d类型的业务数据
*
* step 1: 将业务数据da

本文介绍了如何在动态维护栈的过程中,以O(1)的时间复杂度获取栈内的最大值。通过设计辅助栈,保持辅助栈内的元素有序,当主栈元素出栈时,辅助栈同步操作,确保辅助栈顶部始终为当前栈的最大值。文章还提供了一个CSDN链接,展示具体的代码实现。
:O1时间内获取栈内最大值&spm=1001.2101.3001.5002&articleId=122023971&d=1&t=3&u=1957a51c00364b4f83673f80d065fb5f)
1万+

被折叠的 条评论
为什么被折叠?



