设计包含min 函数的栈(push\pop\min)
2012-08-20 22:47
302 查看
栈
一、题目:(感谢 http://blog.csdn.net/v_JULY_v 提供的题目)
设计包含min 函数的栈。
定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。
要求函数min、push 以及pop 的时间复杂度都是O(1)。
二、题目分析:
栈,仅在表尾进行插入和删除操作的线性表,具有后进先出的特性。
要完成这道题目,push、pop函数眨下眼睛就能写出来,问题时如何编写min函数使其能输出栈中最小元素且其时间复杂度为O(1)?
看了网上一些答案,发现这问题能用辅助栈记录最小元素的方式来解决,即每插入一个元素入栈同时把其最小元素push入辅助栈。
(保证辅助栈的栈顶为最小的元素,在入栈是只需要比较辅助栈的栈顶即可判断该元素是否是栈中的最小元素)
在pop栈顶元素时,只需把辅助栈的栈顶一起删除即可。
**辅助栈中的任意元素,必须为元素栈中由栈底至其相同位置的元素中的最小元素
三、代码:
截图:
一、题目:(感谢 http://blog.csdn.net/v_JULY_v 提供的题目)
设计包含min 函数的栈。
定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。
要求函数min、push 以及pop 的时间复杂度都是O(1)。
二、题目分析:
栈,仅在表尾进行插入和删除操作的线性表,具有后进先出的特性。
要完成这道题目,push、pop函数眨下眼睛就能写出来,问题时如何编写min函数使其能输出栈中最小元素且其时间复杂度为O(1)?
看了网上一些答案,发现这问题能用辅助栈记录最小元素的方式来解决,即每插入一个元素入栈同时把其最小元素push入辅助栈。
(保证辅助栈的栈顶为最小的元素,在入栈是只需要比较辅助栈的栈顶即可判断该元素是否是栈中的最小元素)
在pop栈顶元素时,只需把辅助栈的栈顶一起删除即可。
**辅助栈中的任意元素,必须为元素栈中由栈底至其相同位置的元素中的最小元素
三、代码:
//添加一个辅助栈,用于记录当前栈中最小的元素 #include<iostream> using namespace std; const int StackSize=10; //栈默认大小 class stack { public : void ini();//初始化 void push(int x);//入栈 void pop();//出栈 void printStack();//输出栈中所有元素 void printMinStack();//输出栈中最小元素 void printAidStack();//输出辅助栈中所有元素 private : int stackArray[StackSize];//保存栈元素 int minStack[StackSize];//保存栈中最小元素 int size;//栈大小 }; void stack::ini() { size = -1; } void stack::push(int x) { if(size == StackSize - 1) throw "上溢出"; else { size++; if(size == 0) minStack[size] = x; else { if(x < minStack[size-1]) minStack[size] = x; else minStack[size] = minStack[size-1]; } stackArray[size] = x; } } void stack::pop() { cout<<"删除栈顶元素."<<endl; if(size == -1) throw "下溢出"; else{size--;} } void stack::printStack() { cout<<"栈\t:"; for(int i=0;i<=size;i++) { cout<<stackArray[i]<<" "; } cout<<endl; } void stack::printAidStack() { cout<<"辅助栈\t:"; for(int i=0;i<=size;i++) { cout<<minStack[i]<<" "; } cout<<endl; } void stack::printMinStack() { cout<<"THE MIN IS : "<<minStack[size]<<endl; } void main() { stack st; st.ini(); st.push(65); st.push(423); st.push(568); st.push(14); st.push(40); st.push(62); st.printStack(); st.printAidStack(); st.pop(); st.printStack(); st.printAidStack(); st.printMinStack(); }
截图:
相关文章推荐
- 设计一个包含pop,push,min在内的栈,并且各个函数的时间复杂度均为o(1)
- 每天学习一算法系列(3)--设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- 设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1)
- 每天学习一算法系列(3)(设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- 包含min,push,pop函数的栈,时间为O(1)
- 练习系列 - 3、设计包含min函数的栈,push、pop、min的时间复杂度都为O(1),仿照APR_RING采用宏实现
- 实现包含min,max,push,pop函数的栈
- 设计一个堆栈,函数min、push 以及pop 的时间复杂度都是O(1)
- 【编程题目】设计包含 min 函数的栈
- 设计包含 min 函数的栈
- 设计包含min 函数的栈(程序分析)
- 设计包含min()函数的栈
- No2、设计包含 min 函数的栈(栈)
- 2、设计包含min 函数的栈
- (微软面试100题)设计包含min 函数的栈
- 微软100题40题-设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)。
- NO.2 设计包含min 函数的栈
- 设计包含 min 函数的栈
- 【练习】设计包含min 函数的栈
- 2.设计包含min 函数的栈。3.求子数组的最大和