static void Main(string[] args) { var presidents = new LinkedList <string>(); presidents.AddLast("JFK"); presidents.AddLast("Lyndon B Johnson"); presidents.AddLast("Richard Nixon"); presidents.AddLast("Jimmy Carter"); presidents.RemoveFirst(); //presidents.AddFirst("John F Kennedy"); //This is perfectly valid LinkedListNode <string> kennedy = presidents.AddFirst("John F Kennedy"); //This is even better as we already specified the node thus no need to search for it in a future LinkedListNode <string> nixon = presidents.Find("Richard Nixon"); // This is how you specify the node presidents.AddAfter(nixon, "Gerald Ford"); // This presidents.AddAfter("Richard Nixon", "Gerald Ford"); wont work as you need to specify the node /* Find method in finding the node is not ver efficient as it needs to look up the whole list */ foreach (var president in presidents) { Console.WriteLine(president); } //====================================== STACK ========================================== /* Stack is a group of entries stack on top of each other. * It is not indexed thus it needs to be removed one by one starting from the top of the stack. * LAST-in First-out */ Console.WriteLine("\n\t===================== STACK ==========================="); Stack <string> books = new Stack <string>(); /* Notice that books are displayed in a reverse order. * They are in the order they will be taken away from the stack */ books.Push("Programming WPF"); // Push adds the item on top of the stack books.Push("The Philosophy book"); books.Push("Heat and Thermodynamics"); books.Push("Harry Potter"); Console.WriteLine(" All Books: "); foreach (var book in books) { Console.WriteLine(book); } string peek = books.Peek(); // Peek just peeking on the items on a stack Console.WriteLine("\r\tThe item peeked is :" + peek); string topItem = books.Pop(); // Pop removes the item from the top of the stack Console.WriteLine("\tTop item which was :" + topItem); Console.WriteLine(" All Books: "); foreach (var book in books) { Console.WriteLine(book); } //====================================== Queue ========================================== /* Queue is essentially the same as stack just in an opposite way. * First-in First-out from the stack */ // it is particuarly useful for tasks such as on a server. Console.WriteLine("\n\t===================== QUEUE ==========================="); Queue <string> tasks = new Queue <string>(); tasks.Enqueue("Buy washing powder"); // Enqueue adds the item to the end of the list tasks.Enqueue("Get the post"); tasks.Enqueue("Play a game"); tasks.Enqueue("Kiss your wife"); Console.WriteLine(" All tasks: "); foreach (var task in tasks) { Console.WriteLine(task); } string peekTask = tasks.Peek(); // Peek just peeking on the items on a Queue Console.WriteLine("\tThe task that was peeked is : " + peekTask); string deleteTask = tasks.Dequeue(); // Dequeue removes the item from the beginning of the list Console.WriteLine("\tThe item that was dequeued was : " + deleteTask); Console.WriteLine(" All tasks: "); foreach (var task in tasks) { Console.WriteLine(task); } }
public static void Main(string[] args) { string menuSelection = "", newNode = "", existingNode = ""; LinkedList ll = new LinkedList(new Node("zzz")); do { newNode = ""; PrintMainMenu(); menuSelection = Console.ReadLine(); Console.Clear(); switch (menuSelection) { case "1": Console.WriteLine("What value you like the new Node to contain?"); newNode = Console.ReadLine(); if (newNode != "") { ll.AddNode(new Node(newNode)); } else { Console.Clear(); Console.WriteLine("Sorry, you must input a value for the Node. Please try again."); } Console.Write("\nPress any key to return to main menu..."); Console.ReadKey(); Console.Clear(); break; case "2": Console.WriteLine("What value you like the new Node to contain?"); newNode = Console.ReadLine(); Console.Clear(); Console.WriteLine("What is the value of the existing Node to insert the new Node before?"); existingNode = Console.ReadLine(); if (newNode != "" && existingNode != "") { ll.AddBefore(new Node(newNode), new Node(existingNode)); } else { Console.Clear(); Console.WriteLine("Sorry, you must input a value for both Nodes. Please try again."); } Console.Write("\nPress any key to return to main menu..."); Console.ReadKey(); Console.Clear(); break; case "3": Console.WriteLine("What value you like the new Node to contain?"); newNode = Console.ReadLine(); Console.Clear(); Console.WriteLine("What is the value of the existing Node to insert the new Node after?"); existingNode = Console.ReadLine(); if (newNode != "" && existingNode != "") { ll.AddAfter(new Node(newNode), new Node(existingNode)); } else { Console.Clear(); Console.WriteLine("Sorry, you must input a value for both Nodes. Please try again."); } Console.Write("\nPress any key to return to main menu..."); Console.ReadKey(); Console.Clear(); break; case "4": Console.WriteLine("What value you like the new Node to contain?"); newNode = Console.ReadLine(); if (newNode != "") { ll.AddLast(new Node(newNode)); } else { Console.Clear(); Console.WriteLine("Sorry, you must input a value for the Node. Please try again."); } Console.Write("\nPress any key to return to main menu..."); Console.ReadKey(); Console.Clear(); break; case "5": Console.WriteLine("What is the value of the Node you would like to find?"); existingNode = Console.ReadLine(); if (existingNode != "") { Node checkNode = ll.Find(existingNode); if (checkNode != null) { Console.WriteLine("\nFound!"); } else { Console.WriteLine("\nThat Node doesn't exist."); } } else { Console.Clear(); Console.WriteLine("Sorry, you must input a value for the Node. Please try again."); } Console.Write("\nPress any key to return to main menu..."); Console.ReadKey(); Console.Clear(); break; case "6": ll.PrintNodes(); Console.Write("\nPress any key to return to main menu..."); Console.ReadKey(); Console.Clear(); break; case "7": Environment.Exit(0); break; default: Console.WriteLine("That did not match one of the menu options. Try again.\n"); break; } } while (menuSelection != "7"); }