设计包含min函数的栈

题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数minpush以及pop的时间复杂度都是O(1)

#include<stdio.h>
#include<stdlib.h>
#define M 100
#define m 10
struct minStack{
int top;
int tail;
int *valueStack;
int *indexStack;
};
void InitStack(minStack& s){
s.top = 0;
s.tail = 0;
s.valueStack = (int*)malloc(sizeof(int)*M);
s.indexStack = (int*)malloc(sizeof(int)*M);
}
void push(minStack*& s,int data){
if(s.top - s.tail >= M){
  s.valueStack = (int*)realloc(s.valueStack,m);
  s.indexStack = (int*)realloc(s.indexStack,m);
}
if(!s.valueStack||!s.indexStack)
  return ;
s.valueStack[s.top] = data;
if(s.top == s.tail||min(s) > data)
  s.indexStack[s.top++] = s.top;
else  
  s.indexStack[s.top++] = s.indexStack[s.top-1];
}
int min(minStack* s){
if(s.top - s.tail == 0)
  return 0;
return s.valueStack[s.indexStack[s.top-1]];
}
int pop(minStack& s){
if(s.top - s.tail == 0)
  return 0;
return s.valueStack[--s.top];
}
void DestoryStack(minStack s)
free(s.valueStack);
free(s.indexStack);
}  
int main(){
minStack s;
int data;
printf("输入元素(0结束):\n");
scanf("%d",&data);
while(data){
  push(s,data);
  printf("最小元素:%d\n",min(s));
  printf("输入元素(0结束):\n");
  scanf("%d",&data);
}
DestoryStack(s);
return 0; }

 

posted @ 2013-10-31 19:27  idealing  阅读(241)  评论(0编辑  收藏  举报