看到一道笔试题,要求设计一个“栈”数据结构,使得对该栈的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; //存储的顺序表