Updated repo to be C# only
This commit is contained in:
		
							
								
								
									
										75
									
								
								Datastructures/Queue/Queue.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								Datastructures/Queue/Queue.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
			
		||||
namespace C_.Datastructures.Queue
 | 
			
		||||
{
 | 
			
		||||
    internal class Queue<T>
 | 
			
		||||
    {
 | 
			
		||||
        internal QueueNode<T>? Head { get; set; }
 | 
			
		||||
        internal QueueNode<T>? Tail { get; set; }
 | 
			
		||||
        private int Count { get; set; } = 0;
 | 
			
		||||
 | 
			
		||||
        public static Queue<T> Create()
 | 
			
		||||
        {
 | 
			
		||||
            //Create a new queue without a head / tail
 | 
			
		||||
            return new Queue<T>();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static Queue<T> Create(T? value)
 | 
			
		||||
        {
 | 
			
		||||
            //Create a new Queue with a head + tail
 | 
			
		||||
            QueueNode<T> newNode = QueueNode<T>.Create(value, default);
 | 
			
		||||
            return new Queue<T>
 | 
			
		||||
            {
 | 
			
		||||
                Head = newNode,
 | 
			
		||||
                Tail = newNode,
 | 
			
		||||
                Count = 1
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Push(T? value)
 | 
			
		||||
        {
 | 
			
		||||
            //Add an Item to the end of the Queue
 | 
			
		||||
            Count++;
 | 
			
		||||
            if (Count > 1)
 | 
			
		||||
            {
 | 
			
		||||
                Tail!.Next = QueueNode<T>.Create(value, default);
 | 
			
		||||
                Tail = Tail!.Next;
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            Head = QueueNode<T>.Create(value, default);
 | 
			
		||||
            Tail = Head;
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public T? Pop()
 | 
			
		||||
        {
 | 
			
		||||
            //Take the item off the front of the queue
 | 
			
		||||
            T? value = default;
 | 
			
		||||
            if (Count > 0)
 | 
			
		||||
            {//Assign the default value if there are any items left in the Queue
 | 
			
		||||
                Count--;
 | 
			
		||||
                value = Head!.Value;
 | 
			
		||||
                Head = Head.Next;
 | 
			
		||||
                if (Count == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    Head = default;
 | 
			
		||||
                    Tail = Head;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return value;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public T? Peek()
 | 
			
		||||
        {
 | 
			
		||||
            //View item at the front of the Queue
 | 
			
		||||
            if (Count > 0)
 | 
			
		||||
            {
 | 
			
		||||
                return Head!.Value;
 | 
			
		||||
            }
 | 
			
		||||
            return default;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public int GetCount()
 | 
			
		||||
        {//Return the number of items in the list
 | 
			
		||||
            return Count;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								Datastructures/Queue/QueueNode.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								Datastructures/Queue/QueueNode.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
using C_.Datastructures.Generic;
 | 
			
		||||
 | 
			
		||||
namespace C_.Datastructures.Queue
 | 
			
		||||
{
 | 
			
		||||
    internal class QueueNode<T> : UndirectedNode<T, QueueNode<T>>
 | 
			
		||||
    {
 | 
			
		||||
        public static QueueNode<T> Create(T? value, QueueNode<T>? next)
 | 
			
		||||
        {
 | 
			
		||||
            return new QueueNode<T>
 | 
			
		||||
            {
 | 
			
		||||
                Value = value,
 | 
			
		||||
                Next = next
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user