您的位置:首页 > 理论基础 > 数据结构算法

请设计包含min函数的栈,定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素

2015-05-19 18:03 453 查看
请设计包含min函数的栈。

定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。

要求函数min、push以及pop的时间复杂度都是O(1)。

存储方式采用顺序栈,栈的节点包括数据data,当前栈中的最小值min

#define STACK_INIT_SIZE 100
#define STACKIN 10

//栈节点
typedef struct Element{
int data;
int min;
}Element;
//顺序栈
typedef struct Stack{
Element *base;
Element *top;
int stacksize;
}Stack;
Stack StackInit(){   //构造一个空栈
Stack s;
s.base=(Element*)malloc(STACK_INIT_SIZE*sizeof(Element));
if(!s.base) exit(OVERFLOW);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return s;
}
void Push(Stack &s,int e){    //入栈
if((s.top-s.base)>=s.stacksize){
s.base=(Element*)realloc(s.base,(s.stacksize+STACKIN)*sizeof(Element));
if(!s.base) exit(OVERFLOW);
s.top=s.base+s.stacksize;
s.stacksize+=STACKIN;
}
if(s.base==s.top){
s.top->data=e;
s.top->min=e;
s.top++;
}
if(e<(s.top-1)->min){
s.top->data=e;
s.top->min=e;
s.top++;
}
else{
s.top->data=e;
s.top->min=(s.top-1)->min;
s.top++;
}
}
int Pop(Stack &s,int &e){    //出栈
if(s.base==s.top) return ERROR;
e=(--s.top)->data;
return OK;
}
int min(Stack s){//求当前栈中的最小值
if(s.base==s.top)
return ERROR;
int min1;
min1=(s.top-1)->min;
return min1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐