满足min.push.pop操作时间复杂度为o(1)的栈

来源:互联网 发布:linux shell 数值计算 编辑:程序博客网 时间:2024/06/01 08:00
/**设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)。*/#include <limits>#include <exception>#include <iostream>class stack{public:stack(int max_size){this->max_size=max_size;this->cur_size=0;this->cur_min=std::numeric_limits<int>::max();this->cur_min_pos=-1;this->arr=new int[max_size];this->pos_arr=new int[max_size];}~stack(){delete[] arr;delete[] pos_arr;}int min(){return this->cur_min;}void push(int val){if(this->cur_size==this->max_size)return ;else{if(val<this->cur_min){this->cur_min=val;this->pos_arr[this->cur_size]=this->cur_min_pos;this->cur_min_pos=this->cur_size;}this->arr[this->cur_size++]=val;}}int pop(){if(this->cur_size==0)throw std::exception("stack has been empty");else{if(this->cur_min_pos==--this->cur_size){this->cur_min_pos=this->pos_arr[this->cur_size];this->cur_min=this->arr[this->cur_min_pos];}return this->arr[this->cur_size];}}private://currrent minint cur_min;//cur_min posint cur_min_pos;//value arrayint* arr;//pos arrayint* pos_arr;//max sizeint max_size;//current sizeint cur_size;};int main(int argc,char* argv[]){try{stack t(10);t.push(23);t.push(2);t.push(32);t.push(1);std::cout<<t.min()<<std::endl;///t.pop();std::cout<<t.min()<<std::endl;}catch(std::exception& e){std::cout<<"stack is empty!"<<std::endl;}system("PAUSE");return 0;}