动态实时获取当前栈中的最大值元素(最小值同理)。
【设计思路】
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