常用数据结构2——栈,实现PUSH、POP和取最小值操作算法时间复杂度为o(1)

     看到一道笔试题,要求设计一个“栈”数据结构,使得对该栈的PUSH(进栈)、POP(出栈)以及取最小值(MIN)操作的时间复杂度为o(1)。我在网上搜了下,大家貌似也是用双栈来实现的。之所以说是双栈,是因为还有个最小值栈,当push的值最小的时候同时在最小值栈push,当pop的值正好是最小值的时候,同时将最小值栈的数据弹出。

     我自己写了个栈结构,最小栈没有显式的pop和push,栈都用顺序表(数组)来实现。

    好了,废话不多说,上代码。

/***************************************************************************
     程序文件名 :stack.c
     作者       :船长     日期       :2011.08.28
     版本       :1.0
     实现功能  :实现栈的PUSH、POP和取最小值操作,算法时间复杂度为o(1)
***************************************************************************
   修改记录:
   Modi Report:Format: <number>, <time>, <author>, <desc> 
***************************************************************************/


/** @file:stack.c
 * @details:本文件实现了栈的创建、删除、PUSH、POP和取最小值等操作 
 */

#include<stdio.h>
#include<stdlib.h>


typedef int dataType;  //定义栈中的数据类型 

typedef struct minStack   //该栈中存储最小值 
{
	dataType *minStackData;  //存储的顺序表指针 
	int minStackLength;      /*栈顶位置*/ 
}minStack; 

typedef struct stack
{
	dataType *stackData;  //存储的顺序表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值