diff --git a/test2/test2.Test/QueueTest.cs b/test2/test2.Test/QueueTest.cs new file mode 100644 index 0000000..121df1b --- /dev/null +++ b/test2/test2.Test/QueueTest.cs @@ -0,0 +1,58 @@ +using NUnit.Framework; + + +namespace test2.Test +{ + public class Tests + { + private Queue queue; + + [SetUp] + public void Setup() + { + queue = new Queue(); + queue.Enqueue(1, 1); + queue.Enqueue(9, 9); + queue.Enqueue(2, 2); + queue.Enqueue(5, 5); + queue.Enqueue(3, 3); + queue.Enqueue(4, 4); + queue.Enqueue(5, 10); + queue.Enqueue(7, 10); + queue.Enqueue(10, 10); + queue.Enqueue(7, 7); + queue.Enqueue(8, 8); + queue.Enqueue(6, 6); + } + + [Test] + public void EnqueueTest() + { + var queueNew = new Queue(); + Assert.IsTrue(queueNew.Empty()); + queueNew.Enqueue(1, 4); + Assert.IsFalse(queueNew.Empty()); + } + + [Test] + public void DequeueTest() + { + int[] result1 = new int[4]{ 5, 7, 10, 9 }; + var functionResult = queue.Dequeue(); + Assert.AreEqual(result1[0], functionResult); + functionResult = queue.Dequeue(); + Assert.AreEqual(result1[1], functionResult); + functionResult = queue.Dequeue(); + Assert.AreEqual(result1[2], functionResult); + functionResult = queue.Dequeue(); + Assert.AreEqual(result1[3], functionResult); + } + + [Test] + public void DequeueExceptionTest() + { + var queueException = new Queue(); + Assert.Throws(() => queueException.Dequeue()); + } + } +} \ No newline at end of file diff --git a/test2/test2.Test/test2.Test.csproj b/test2/test2.Test/test2.Test.csproj new file mode 100644 index 0000000..b65bda6 --- /dev/null +++ b/test2/test2.Test/test2.Test.csproj @@ -0,0 +1,19 @@ + + + + net5.0 + + false + + + + + + + + + + + + + diff --git a/test2/test2.sln b/test2/test2.sln new file mode 100644 index 0000000..c8634ad --- /dev/null +++ b/test2/test2.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31205.134 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "test2", "test2\test2.csproj", "{020B075D-FF1A-41BD-90FF-1A545F520156}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "test2.Test", "test2.Test\test2.Test.csproj", "{65AEFBC3-3090-41B6-B4C3-F17B836DC26B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {020B075D-FF1A-41BD-90FF-1A545F520156}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {020B075D-FF1A-41BD-90FF-1A545F520156}.Debug|Any CPU.Build.0 = Debug|Any CPU + {020B075D-FF1A-41BD-90FF-1A545F520156}.Release|Any CPU.ActiveCfg = Release|Any CPU + {020B075D-FF1A-41BD-90FF-1A545F520156}.Release|Any CPU.Build.0 = Release|Any CPU + {65AEFBC3-3090-41B6-B4C3-F17B836DC26B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {65AEFBC3-3090-41B6-B4C3-F17B836DC26B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {65AEFBC3-3090-41B6-B4C3-F17B836DC26B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {65AEFBC3-3090-41B6-B4C3-F17B836DC26B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {29C9CA88-0E80-4B80-A756-321F9F4FBCC9} + EndGlobalSection +EndGlobal diff --git a/test2/test2/Program.cs b/test2/test2/Program.cs new file mode 100644 index 0000000..13b90c0 --- /dev/null +++ b/test2/test2/Program.cs @@ -0,0 +1,32 @@ +using System; + +namespace test2 +{ + class Program + { + static void Main() + { + var queue = new Queue(); + queue.Enqueue(1, 1); + queue.Enqueue(9, 9); + queue.Enqueue(2, 2); + queue.Enqueue(5, 5); + queue.Enqueue(3, 3); + queue.Enqueue(4, 4); + queue.Enqueue(5, 10); + queue.Enqueue(7, 10); + queue.Enqueue(10, 10); + queue.Enqueue(7, 7); + queue.Enqueue(8, 8); + queue.Enqueue(6, 6); + var result = queue.Dequeue(); + Console.WriteLine(result); + result = queue.Dequeue(); + Console.WriteLine(result); + result = queue.Dequeue(); + Console.WriteLine(result); + result = queue.Dequeue(); + Console.WriteLine(result); + } + } +} diff --git a/test2/test2/Queue.cs b/test2/test2/Queue.cs new file mode 100644 index 0000000..23e7c61 --- /dev/null +++ b/test2/test2/Queue.cs @@ -0,0 +1,115 @@ +using System; + +namespace test2 +{ + /// + /// queue with priority + /// + public class Queue + { + /// + /// node on queue + /// + private class Node + { + public int Priority { get; set; } + + public int Value { get; set; } + + public Node Next { get; set; } + public Node(int priority, int value) + { + Value = value; + Priority = priority; + Next = null; + } + } + + private Node head; + + private Node tail; + + public Queue() + => head = null; + + + /// + /// add to queue + /// + public void Enqueue(int value, int priority) + { + if (head == null) + { + head = new Node(priority, value); + head.Next = null; + tail = head; + return; + } + var node = tail; + var newNode = new Node(priority, value); + tail = newNode; + node.Next = tail; + } + + private Node runner; + + private int GetMaxPriority() + { + int priority = int.MinValue; + runner = head; + while (runner != null) + { + if (runner.Priority > priority) + { + priority = runner.Priority; + runner = runner.Next; + continue; + } + runner = runner.Next; + } + return priority; + } + + /// + /// function remove from queue + /// + /// value's array with max priority + public int Dequeue() + { + if (Empty()) + { + throw new QueueException("Queue is Empty!"); + } + int maxPriority = GetMaxPriority(); + runner = head; + int result = 0; + Node previosNode = null; + while (runner.Next != null) + { + if (runner.Next.Priority == maxPriority) + { + result = runner.Next.Value;; + runner.Next = runner.Next.Next; + previosNode = runner; + break; + } + runner = runner.Next; + } + if (runner.Priority == maxPriority && runner.Next == null) + { + result = runner.Next.Value; + runner = null; + tail = previosNode; + } + return result; + } + + /// + /// is queue empty? + /// + /// true - queue is empty + public bool Empty() + => head == null; + + } +} \ No newline at end of file diff --git a/test2/test2/QueueException.cs b/test2/test2/QueueException.cs new file mode 100644 index 0000000..68d0df1 --- /dev/null +++ b/test2/test2/QueueException.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace test2 +{ + public class QueueException : Exception + { + public QueueException() + { + } + + public QueueException(string message) + : base(message) + { + } + } +} diff --git a/test2/test2/test2.csproj b/test2/test2/test2.csproj new file mode 100644 index 0000000..2082704 --- /dev/null +++ b/test2/test2/test2.csproj @@ -0,0 +1,8 @@ + + + + Exe + net5.0 + + +