DataStructuresCSharp/C#/Datastructures/Stack.cs
2022-03-31 22:05:13 +01:00

55 lines
1.4 KiB
C#

using C_.Datastructures.Nodes;
namespace C_.Datastructures
{
public class Stack<T>
{
internal StackNode<T>? Head { get; set; }
private int Count { get; set; } = 0;
public static Stack<T> Create(){
//Create a new stack without a head
return new Stack<T>();
}
public static Stack<T> Create(T value){
//Create a new Stack with a head
return new Stack<T>{
Head = StackNode<T>.Create(value, default),
Count = 1
};
}
public void Push(T value){
//Add an Item to the top of the stack
Count++;
Head = StackNode<T>.Create(value, Head);
return;
}
public T? Pop(){
//Take the item off of the top of the stack
T? value = default;
if (Count > 0)
{//Assign the default value if there are any items left in the stack
Count--;
value = Head!.Value;
Head = Head.Next;
if (Count == 0)
{
Head = default;
}
}
return value;
}
public T? Peek(){
//View item on top of the stack
if (Count > 0)
{
return Head!.Value;
}
return default;
}
}
}