public static void Main()
ArrayStack arrayStack = new ArrayStack(9);
Console.WriteLine(arrayStack.Pop(1));
Console.WriteLine(arrayStack.Pop(2));
Console.WriteLine(arrayStack.Pop(3));
Console.WriteLine(arrayStack.Peek(1));
Console.WriteLine(arrayStack.Peek(2));
Console.WriteLine(arrayStack.Peek(3));
Console.WriteLine(arrayStack.Pop(1));
Console.WriteLine(arrayStack.Pop(2));
Console.WriteLine(arrayStack.Pop(3));
Console.WriteLine(arrayStack.Peek(1));
Console.WriteLine(arrayStack.Peek(2));
Console.WriteLine(arrayStack.Peek(3));
private int[] threeStacks;
private int[] _min = new int[3];
private int[] _max = new int[3];
private int[] _pointer = new int[3];
public ArrayStack(int size)
threeStacks = new int[size];
_min[0] = 0; _max[0] = capacity - 1;
_min[1] = capacity; _max[1] = (capacity*2) -1;
_min[2] = capacity*2; _max[2] = size-1;
_pointer[1] = capacity - 1;
_pointer[2] = (capacity*2) -1;
throw new Exception("Size is less than 3");
public string Pop(int stackNumber)
stackNumber = actualStackNumber(stackNumber);
if(_pointer[stackNumber] < _min[stackNumber])
return ("Stack is Empty");
int answer = threeStacks[_pointer[stackNumber]];
return answer.ToString();
public void Push(int stackNumber, int number)
stackNumber = actualStackNumber(stackNumber);
if(_pointer[stackNumber] == _max[stackNumber])
Console.WriteLine("Stack is Full");
threeStacks[_pointer[stackNumber]] = number;
public string Peek(int stackNumber)
stackNumber = actualStackNumber(stackNumber);
if(_pointer[stackNumber] < _min[stackNumber])
int answer = threeStacks[_pointer[stackNumber]];
return answer.ToString();
public bool IsEmpty(int stackNumber)
return (_pointer[stackNumber] < _min[stackNumber]);
public bool IsFull(int stackNumber)
return (_pointer[stackNumber] == _max[stackNumber]);
private int actualStackNumber(int num)
throw new Exception("Wrong Stack Number");