careercup3.2

来源:互联网 发布:数据库用接口d 编辑:程序博客网 时间:2024/06/06 05:08

基本操作。

/*How would you design a stack which, in addition to push and pop, also has a function min which returns the minimum element? Push, pop and min should all operate in O(1) time*/#include <iostream>using namespace std;class Node{public:int data;    Node* next;Node(){this->next = 0;}Node(int a, Node* n=0):data(a),next(n){}};class Stack{Node* top;Node* minx;public:Stack():top(0),minx(0){}Stack(int ar[],int len){top = minx = 0;for(int i = 0; i<len; i++)push(ar[i]);}~Stack();Node* pop();void push(int);int findmin()const {return minx->data;};Node* findtop()const {return top;};void print()const{Node* p = top; while(p){  cout<<p->data<<" ";  p = p->next;  }}};Stack::~Stack(){while(top){   Node* p =pop();   delete p;}}Node* Stack::pop(){if(!top) return 0;Node* p = top;top = top->next;return p;}void Stack::push(int k){Node* p = top;top = new Node(k,p);if (!minx) minx = p; else if( minx->data > p->data)minx = p;}int main(){int ar[]={16,423,5,67,8,9,45,78,777,33,12,11,76,4,43,7};Stack ll(ar,16);cout<<ll.findmin()<<endl;}