Today, I read introduction to algorithms and saw two exercises, for example, the question. No parameter checks, exception handling, thread security, etc.
Class DoubleStackQueue
{
Private System. Collections. Stack stackA, stackB;
Public DoubleStackQueue ()
{
StackA = new System. Collections. Stack ();
StackB = new System. Collections. Stack ();
}
Public void Enqueue (object obj)
{
StackA. Push (obj );
}
Public object Dequeue ()
{
While (stackA. Count! = 0)
StackB. Push (stackA. Pop ());
Return stackB. Pop ();
}
}
Class DoubleQueueStack
{
Private System. Collections. Queue queueA, queueB;
Public DoubleQueueStack ()
{
QueueA = new System. Collections. Queue ();
QueueB = new System. Collections. Queue ();
}
Public void Push (object obj)
{
While (queueA. Count! = 0)
QueueB. Enqueue (queueA. Dequeue ());
QueueA. Enqueue (obj );
While (queueB. Count! = 0)
QueueA. Enqueue (queueB. Dequeue ());
}
Public object Pop ()
{
Return queueA. Dequeue ();
}
}
Improved: DoubleQueueStack
Class DoubleQueueStack
{
Private System. Collections. Queue queueA, queueB;
Public DoubleQueueStack ()
{
QueueA = new System. Collections. Queue ();
QueueB = new System. Collections. Queue ();
}
Public void Push (object obj)
{
If (queueA. Count = 0 & queueB. Count = 0)
QueueA. Enqueue (obj );
Else
{
If (queueA. Count = 0) queueB. Enqueue (obj );
Else queueA. Enqueue (obj );
}
}
Public object Pop ()
{
If (queueA. Count = 0)
{
While (queueB. Count! = 1)
QueueA. Enqueue (queueB. Dequeue ());
Return queueB. Dequeue ();
}
Else if (queueB. Count = 0)
{
While (queueA. Count! = 1)
QueueB. Enqueue (queueA. Dequeue ());
Return queueA. Dequeue ();
}
Return null;
}
}