private static void RecursiveReverseInternalUtil(MyStack <int> myStack) { if (!myStack.IsEmpty()) { int data = myStack.Pop(); RecursiveReverseInternalUtil(myStack); AddDataAtBottom(myStack, data); } }
public void Push(T data) { valueStack.Push(data); //critical to check empty else any garbage can come if (minStack.IsEmpty() || minStack.Peek().CompareTo(data) >= 0) // to handle duplicate push when equal { minStack.Push(data); } if (maxStack.IsEmpty() || maxStack.Peek().CompareTo(data) <= 0) { maxStack.Push(data); } }
private static void AddDataAtBottom(MyStack <int> myStack, int data) { if (myStack.IsEmpty()) { myStack.Push(data); } else { int otherData = myStack.Pop(); AddDataAtBottom(myStack, data); myStack.Push(otherData); } }
public T Pop() { if (!valueStack.IsEmpty()) { T data = valueStack.Peek(); //Remove min if needed if (minStack.Peek().CompareTo(data) == 0) { minStack.Pop(); //discard top } //Remove max if needed if (maxStack.Peek().CompareTo(data) == 0) { maxStack.Pop(); //discard top } return(valueStack.Pop()); } return(default(T)); }