数据结构零基础入门(初学者也能看懂):O(1)时间内获取栈内最大值

动态实时获取当前栈中的最大值元素(最小值同理)。

【设计思路】

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
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值