面试常见算法习题2
来源:互联网 发布:妮维雅蓝罐 知乎 编辑:程序博客网 时间:2024/05/29 08:35
/*2010/10/18 July2.设计包含min函数的栈。定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。*/class Stack{private: struct Link { int data; Link* next; Link(const int& dat, Link* nxt):data(dat), next(nxt){} ~Link(){} } *pHead; Link *pMinimum; public: Stack():pHead(NULL), pMinimum(NULL){} Stack(const int& initial) { pHead = new Link(initial, NULL); pMinimum = new Link(initial, NULL); } ~Stack() { Link* tmpNode = NULL; while(pHead != NULL) { tmpNode = pHead; pHead = pHead->next; delete tmpNode; tmpNode = NULL; } while(pMinimum != NULL) { tmpNode = pMinimum; pMinimum = pMinimum->next; if(tmpNode != NULL) { delete tmpNode; tmpNode = NULL; } } } bool push(const int& newData) { pHead = new Link(newData, pHead); if(pMinimum == NULL || pMinimum->data >= newData) { pMinimum = new Link(newData, pMinimum); } return true; } bool pop(int& iData) { if(pHead == NULL) { return false; } iData = pHead->data; Link* tmpNode = pHead; pHead = pHead->next; delete tmpNode; if(iData == pMinimum->data) { tmpNode = pMinimum; pMinimum = pMinimum->next; delete tmpNode; } return true; } bool min(int& iMinimum) const { if(pMinimum == NULL) { return false; } iMinimum = pMinimum->data; return true; } bool empty() const { return pHead == NULL; }};