mirror of
https://github.com/sharkdp/bat
synced 2024-12-20 17:23:07 +00:00
65 lines
1.4 KiB
C#
65 lines
1.4 KiB
C#
|
namespace StackImplementation
|
||
|
{
|
||
|
internal class Stack<T>
|
||
|
{
|
||
|
private int _top;
|
||
|
private const int Capacity = 4;
|
||
|
private readonly T[] _stack = new T[Capacity];
|
||
|
|
||
|
public Stack()
|
||
|
{
|
||
|
_top = -1;
|
||
|
}
|
||
|
|
||
|
private bool IsEmpty()
|
||
|
{
|
||
|
return _top < 0;
|
||
|
}
|
||
|
private bool IsFull()
|
||
|
{
|
||
|
return _top == Capacity - 1;
|
||
|
}
|
||
|
|
||
|
public void Peek()
|
||
|
{
|
||
|
System.Console.WriteLine(!IsEmpty() ? $"The topmost element is: {_stack[_top]}" : "The stack is empty.");
|
||
|
}
|
||
|
|
||
|
public T Pop()
|
||
|
{
|
||
|
return !IsEmpty() ? _stack[_top--] : default;
|
||
|
}
|
||
|
|
||
|
public void Push(T element)
|
||
|
{
|
||
|
if (!IsFull())
|
||
|
{
|
||
|
_stack[++_top] = element;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
System.Console.WriteLine("Cannot push - the stack is full.");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override string ToString()
|
||
|
{
|
||
|
if (IsEmpty())
|
||
|
{
|
||
|
return "The stack is empty.";
|
||
|
}
|
||
|
|
||
|
var depiction = "";
|
||
|
|
||
|
for (var index = 0; index < _top; index++)
|
||
|
{
|
||
|
depiction += _stack[index].ToString() + ' ';
|
||
|
}
|
||
|
|
||
|
depiction += _stack[_top].ToString();
|
||
|
|
||
|
return $"Stack: [{depiction}]";
|
||
|
}
|
||
|
}
|
||
|
}
|