pop push min O(1)
来源:互联网 发布:家庭记账软件免费版 编辑:程序博客网 时间:2024/05/18 02:45
#include <iostream>#include <memory.h>using namespace std;#include<stdio.h>#define STACK_LEN 7typedef struct{int data;int min;}stackitem;typedef struct{stackitem data[STACK_LEN];int top;}stack;void push(stack *s,int val){s->data[s->top].data = val;if(s->top > 0) // 保证栈顶元素中的min始终为当前栈中最小值{if(val < s->data[s->top-1].min) // 如果当前push进的元素小于栈中最小元素值s->data[s->top].min = val; // 把当前元素置为栈中最小元素值elses->data[s->top].min = s->data[s->top-1].min;}else// 否则,不更新s->data[s->top].min = val;s->top++;}int pop(stack *s){if(s->top-1 >= 0)return s->data[--s->top].data;elsereturn -1;}int min(stack*s){if(s->top-1 >= 0)return s->data[s->top-1].min;elsereturn -1;}int main(int argc,char *argv[]){stack s;memset(&s,0,sizeof(s));push(&s,5);push(&s,2);push(&s,1);push(&s,3);push(&s,7);push(&s,9);printf("pop: %d\n",pop(&s));printf("min: %d\n\n",min(&s));printf("pop: %d\n",pop(&s));printf("min: %d\n\n",min(&s));printf("pop: %d\n",pop(&s));printf("min: %d\n\n",min(&s));printf("pop: %d\n",pop(&s));printf("min: %d\n\n",min(&s)); printf("pop: %d\n",pop(&s));printf("min: %d\n\n",min(&s));return 0;}/*class C_Overflow {};template<typename T, int MAX_SIZE = 10>class C_MinStack{public: C_MinStack(); bool IsEmpty() const { return nCurLen == 0; } bool IsFull() const { return nCurLen == MAX_SIZE; }int GetSize() const { return nCurLen; }const T& Top() const; const T& GetMin() const; int Push(const T& val); T Pop();private: T arrAllItem[MAX_SIZE]; int arrMinIndex[MAX_SIZE]; int nCurLen;int nCurMinPos;};template<typename T, int SIZE>C_MinStack<T, SIZE>::C_MinStack():nCurLen(0),nCurMinPos(0) {}template<typename T, int SIZE>const T& C_MinStack<T, SIZE>::Top() const{ if (IsEmpty()) { throw C_Overflow(); } return arrAllItem[nCurLen - 1];}template<typename T, int SIZE>const T& C_MinStack<T, SIZE>::GetMin() const{ if (IsEmpty()) { throw C_Overflow(); } return arrAllItem[arrMinIndex[nCurMinPos - 1]];}template<typename T, int SIZE>int C_MinStack<T,SIZE>::Push(const T& val){ if (IsFull()) { throw C_Overflow(); } if (IsEmpty() || val < GetMin()) { arrMinIndex[nCurMinPos++] = nCurLen; } arrAllItem[nCurLen++] = val;return nCurLen;}template<typename T, int SIZE>T C_MinStack<T, SIZE>::Pop(){ if (IsEmpty()) { throw C_Overflow(); } T retVal = arrAllItem[--nCurLen]; if (nCurLen == arrMinIndex[nCurMinPos-1]) { nCurMinPos--; } return retVal;}int main(int argc, char * argv[]){C_MinStack<int> objStack;objStack.Push(2);objStack.Push(4);objStack.Push(8);objStack.Push(6);objStack.Push(12);objStack.Push(10);objStack.Push(15);objStack.Push(1);cout << "Stack size is: " << objStack.GetSize() << ",Min value is: " << objStack.GetMin() << endl;objStack.Pop();cout << "Stack size is: " << objStack.GetSize() << ",Min value is: " << objStack.GetMin() << endl;objStack.Pop();cout << "Stack size is: " << objStack.GetSize() << ",Min value is: " << objStack.GetMin() << endl;objStack.Pop();cout << "Stack size is: " << objStack.GetSize() << ",Min value is: " << objStack.GetMin() << endl;return 0;}*/
0 0
- pop push min O(1)
- push, pop, min 都为O(1)的栈
- 带MIN函数的栈实现(push pop min 操作都只花O(1))
- 笔试面试之自定义栈使pop push min复杂度最小o(1)
- 设计桟的min、push以及pop的时间复杂度都是O(1)
- 实现pop push min操作时间复杂度为O(1)的栈结构
- 实现一个栈,使push,pop,min操作只需要o(1)时间
- 满足min.push.pop操作时间复杂度为o(1)的栈
- 设计一个堆栈,函数min、push 以及pop 的时间复杂度都是O(1)
- 数据结构---设计一个栈,push, pop, min 时间复杂度都是 O(1)
- pop,push,min三种操作在O(1)的数据结构
- 实现push pop min皆为O(1)的栈
- 设计桟的 min、push以及pop的时间复杂度都是O(1) Java 实现
- 实现一个栈,要求Push/Pop/Min(返回最小值)的时间复杂度为O(1)
- 实现一个栈的pop,push,Min(最小值),时间复杂度为O(1)
- 实现一个栈,要求push,pop,Min的操作时间复杂度为O(1)
- 设计一个栈,push, pop, min 时间复杂度都是 O(1)
- 设计一个栈,除了pop push 还支持Min,时间复杂度都为o(1);
- UVALive 6340 Gandalf vs the Balrog(超坑)
- win8连接WiFi受限解放方案
- 计算数组子集
- C# Java间进行RSA加密解密交互
- 常用的鼠标操作
- pop push min O(1)
- OpenGLES demo - 8. Pipe Line管线
- Cocostudio学习笔记(2) Button + CheckBox
- 题目1 : 最长回文子串
- ACRush 楼天成 回忆录
- 通过量产解决U盘写保护,无法格式化问题
- Platform Devices and Drivers
- HDU 4111 Alice and Bob 记忆化搜索
- 【编译原理】自上而下的语法分析之预测分析法