基本操作。
/*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;
}