コード例 #1
0
 private static void RecursiveReverseInternalUtil(MyStack <int> myStack)
 {
     if (!myStack.IsEmpty())
     {
         int data = myStack.Pop();
         RecursiveReverseInternalUtil(myStack);
         AddDataAtBottom(myStack, data);
     }
 }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
 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);
     }
 }
コード例 #4
0
        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));
        }