Example #1
0
        static void Main(string[] args)
        {
            Console.WriteLine("\n---------- Binary Search Tree -----------\n");

            BinaryTree bt = new BinaryTree();

            bt.AddNode(10);
            bt.AddNode(4);
            bt.AddNode(13);
            bt.AddNode(5);
            bt.AddNode(12);
            bt.AddNode(3);
            bt.AddNode(15);

            // VISUAL TREEE OUTPUT:
            //          10
            //      4        13
            //   3    5   12    15

            Console.WriteLine("Excpected output: 10 4 3 5 13 12 15");
            Console.Write("Preorder traversal: "); bt.PreorderTraversal(bt.Root);

            Console.WriteLine("\n\nCalling GetNode(3):  ");
            var findNode = bt.GetNode(3);

            Console.WriteLine(findNode != null ? findNode.Data.ToString() : "Required node is not in the tree.");

            Console.WriteLine("\nCalling GetNode(20):  ");
            var findNode2 = bt.GetNode(20);

            Console.WriteLine(findNode2 != null ? findNode2.Data.ToString() : "Required node is not in the tree.");

            Console.WriteLine("\nRemoving the node 15...");
            bt.Remove(15);
            Console.WriteLine("Excpected output: 10 4 3 5 13 12");
            Console.Write("Preorder traversal: "); bt.PreorderTraversal(bt.Root);
            // VISUAL TREEE OUTPUT:
            //          10
            //      4        13
            //   3    5   12

            Console.WriteLine("\n\nRemoving the node 4...");
            bt.Remove(4);
            Console.WriteLine("Excpected output: 10 5 3 13 12");
            Console.Write("Preorder traversal: "); bt.PreorderTraversal(bt.Root);
            // VISUAL TREEE OUTPUT:
            //          10
            //      5        13
            //   3        12

            Console.WriteLine("\n\n---------- Queue -----------");

            // Instantiating the Queue class
            Queue queue = new Queue();

            // Adding the items in queue
            Console.WriteLine($"\nInserting value {1}. Result: {queue.Enqueue(1)}");
            Console.WriteLine($"Inserting value {2}. Result: {queue.Enqueue(2)}");
            Console.WriteLine($"Inserting value {3}. Result: {queue.Enqueue(3)}");
            Console.WriteLine($"Inserting value {4}. Result: {queue.Enqueue(4)}");

            Console.WriteLine("\nExpected items in queue are: 1 2 3 4\n");
            // Printing the items in the queue after calling four enqueue functions
            Console.WriteLine(queue.PrintQueue());

            // Removing two items from the front of queue
            Console.WriteLine($"\nItem removed from the front of queue: {queue.Dequeue()}");
            Console.WriteLine($"\nItem removed from the front of queue: {queue.Dequeue()}");

            // Printing the items in the queue after calling two dequeue functions
            Console.WriteLine("\nExpected items in queue are: 3 4\n");
            Console.WriteLine(queue.PrintQueue());

            // Printing the element at the front of queue
            Console.WriteLine($"\nPeek the first element in queue: {queue.Peek()}");

            // Removing the rest elements from the queue with Dequeue function
            Console.WriteLine($"\nItem removed from the front of queue: {queue.Dequeue()}");
            Console.WriteLine($"\nItem removed from the front of queue: {queue.Dequeue()}");

            // Trying to dequeue from empty queue
            try
            {
                Console.WriteLine("\nCalling the Dequeue() on empty queue... ");
                queue.Dequeue();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.WriteLine("\n---------- Hashtable -----------\n");

            // Instantiating the HashTable class
            Hashtable ht = new Hashtable();

            // Adding elements to the hash table (key-value pairs)
            ht.Add(1, "One");
            ht.Add(2, "Two");
            ht.Add(3, "Three");
            ht.Add(4, null);
            ht.Add("Code1", "Five");
            ht.Add(5.3, "Six");

            Console.WriteLine($"Total elements in hash table: {ht.Count}");

            // Printing all key-value pairs from hash table
            Console.WriteLine("\nAll key-value pairs added in hash table:");
            foreach (var k in ht.Keys)
            {
                Console.WriteLine($"Key:{k}, Value:{ht[k]}");
            }

            // Printing only values from hash table
            Console.WriteLine("\nAll Values");
            foreach (var k in ht.Keys)
            {
                Console.WriteLine($"Value:{ht[k]}");
            }

            // Remove the item with the specified key
            ht.Remove(5.3); // removes {"Six"}
            Console.WriteLine("\nRemoving item with Key=5.3");

            // Printing all keys from hash table
            Console.WriteLine("\nAll keys contained in hash table:");
            foreach (var k in ht.Keys)
            {
                Console.WriteLine($"Key:{k}");
            }

            // Checking if hash table contains required key or value
            Console.WriteLine("\nCheck if hash table contains...");
            Console.WriteLine($"Contains(1) -> {ht.Contains(1)}");                      // returns true
            Console.WriteLine($"ContainsKey(2) -> {ht.ContainsKey(2)}");                // returns true
            Console.WriteLine($"Contains(6) -> {ht.Contains(6)}");                      // returns false
            Console.WriteLine($"ContainsValue(\"Six\") -> {ht.ContainsValue("Five")}"); // returns true

            // Removes all elements
            ht.Clear();
            Console.WriteLine($"\nTotal elements after Clear(): {ht.Count}");

            Console.WriteLine("\n ---------------- Jednostruko povezana lista-------------\n");

            // Instance of linked list
            LinkedList list = new LinkedList();

            // Add four different nodes into the list
            list.AddFirst(new Node(1));
            list.AddLast(new Node(5));
            list.AddFirst(new Node(7));
            list.AddLast(new Node(8));
            list.AddLast(new Node(0));

            Console.WriteLine("Expecting next sequence: 7 1 5 8 0");
            // Call the function for printing the current nodes in list
            //list.PrintNodeList(list.Head);
            Console.WriteLine(list.PrintNodeList());

            // Check if the specified value is in the list
            Console.WriteLine(String.Format("\nCheck if number 5 is in sequence? Result: {0}", list.Contains(5) ? "true" : "false"));
            Console.WriteLine(String.Format("\nCheck if number 6 is in sequence? Result: {0}", list.Contains(6) ? "true" : "false"));

            // Remove the first node and print the current list
            list.RemoveFirst();
            Console.WriteLine("\nThe first element was removed. Expecting next sequence: 1 5 8 0");
            Console.WriteLine(list.PrintNodeList());

            // Remove the last node and print the current list
            list.RemoveLast();
            Console.WriteLine("\nThe last element was removed. Expecting next sequence: 1 5 8");
            Console.WriteLine(list.PrintNodeList());

            // Delete all nodes in the list
            list.ClearList();

            Console.WriteLine("\n ---------------- Dvostruko povezana lista-------------\n");

            // Instance of linked list
            DoubleLinkedList double_list = new DoubleLinkedList();

            // Add four different nodes into the list
            double_list.AddFirst(new DoubleNode(1));
            double_list.AddLast(new DoubleNode(5));
            double_list.AddFirst(new DoubleNode(7));
            double_list.AddLast(new DoubleNode(8));
            double_list.AddLast(new DoubleNode(0));

            Console.WriteLine("Expecting next sequence: 7 1 5 8 0");
            // Call the function for printing the current nodes in double linked list
            Console.WriteLine(double_list.PrintNodeList());

            // Check if the specified value is in the double linked list
            Console.WriteLine(String.Format("\nCheck if number 5 is in sequence? Result: {0}", double_list.Contains(5) ? "true" : "false"));
            Console.WriteLine(String.Format("\nCheck if number 6 is in sequence? Result: {0}", double_list.Contains(6) ? "true" : "false"));

            // Remove the first node and print the current double linked list
            double_list.RemoveFirst();
            Console.WriteLine("\nThe first element was removed. Expecting next sequence: 1 5 8 0");
            Console.WriteLine(double_list.PrintNodeList());

            // Remove the last node and print the current double linked list
            double_list.RemoveLast();
            Console.WriteLine("\nThe last element was removed. Expecting next sequence: 1 5 8");
            Console.WriteLine(double_list.PrintNodeList());

            // Delete all nodes in the list
            double_list.ClearList();

            Console.WriteLine("\n-------------- Stack --------------");

            // Instantiating the Stack class
            Stack stack = new Stack();

            // Adding the items in stack
            Console.WriteLine($"\nPushing value {1}. Result: {stack.Push(1)}");
            Console.WriteLine($"Pushing value {2}. Result: {stack.Push(2)}");
            Console.WriteLine($"Pushing value {3}. Result: {stack.Push(3)}");
            Console.WriteLine($"Pushing value {4}. Result: {stack.Push(4)}");

            Console.WriteLine("\nExpected items in stack order are: 4 3 2 1\n");
            // Printing the items in the stack after calling four push functions
            Console.WriteLine(stack.PrintStack());

            // Removing two items from the top
            Console.WriteLine($"\nItem popped from stack: {stack.Pop()}");
            Console.WriteLine($"Item popped from stack: {stack.Pop()}");

            // Printing the items in the stack after calling two pop functions
            Console.WriteLine("\nExpected items in stack order are: 2 1\n");
            Console.WriteLine(stack.PrintStack());

            // Printing the element at the top of the stack
            Console.WriteLine($"\nThe topmost element of Stack is: {stack.Peek()}");

            // Popping all elements from the stack
            Console.WriteLine($"\nItem popped from stack: {stack.Pop()}");
            Console.WriteLine($"\nItem popped from stack: {stack.Pop()}");

            // Trying to pop from empty stack
            try
            {
                Console.WriteLine("\nCalling the Pop() on empty stack... ");
                stack.Pop();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }