Here is my version of the non-abstract specialization of the abstract class Stack: Here follows a sample client program:using System;
public class StackWithArray: Stack{
private Object[] elements;
private int nextPush;
private int MaxSize;
public StackWithArray(int MaxSize){
elements = new Object[MaxSize];
nextPush = 0;
this.MaxSize = MaxSize;
}
public override void Push(Object el){
if (!Full){
elements[nextPush] = el;
nextPush++;
}
}
public override void Pop(){
if (!Empty)
nextPush--;
}
public override Object Top{
get{
if (!Empty)
return elements[nextPush-1];
else return "not possible";}
}
public override bool Full{
get{return nextPush >= MaxSize;}
}
public override bool Empty{
get{return nextPush == 0;}
}
public override int Size{
get{return nextPush;}
}
public override String ToString(){
string res = "Stack: ";
for(int i = 0; i < nextPush; i++){
res += elements[i] + " ";}
return res;
}
}
using System;
class C{
public static void Main(){
Stack s = new StackWithArray(10);
Console.WriteLine("Empty: {0}", s.Empty);
Console.WriteLine("Full: {0}", s.Full);
s.Push(5); s.Push(6); s.Push(7);
s.Push(15); s.Push(16); s.Push(17);
s.Push(18); s.Push(19); s.Push(20);
s.Push(21);
Console.WriteLine("{0}", s.Size);
Console.WriteLine("{0}", s.Top);
Console.WriteLine("{0}", s);
s.Pop();s.Pop();s.Pop();s.Pop();s.Pop();s.Pop();s.Pop();
Console.WriteLine("Empty: {0}", s.Empty);
Console.WriteLine("Full: {0}", s.Full);
Console.WriteLine("Top: {0}", s.Top);
Console.WriteLine("{0}", s);
s.ToggleTop();
Console.WriteLine("{0}", s);
}
}