链表中元素存储内存中是不连续分配,每个元素都有记录前后节点,节点值可以重复,不能通过下标访问,泛型的使用保证类型安全,可以避免装箱拆箱,找元素就只能遍历,查找不方便,增删比较快。
例如,
- Console.WriteLine("***************LinkedList
******************" ); - LinkedList<string> linkedList = new LinkedList<string>();
- linkedList.AddFirst("C/C++");
- linkedList.AddLast("Java");
-
- bool isContain = linkedList.Contains("Java");
- LinkedListNode<string> nodeC = linkedList.Find("C/C++"); // 从头查找
- linkedList.AddBefore(nodeC, "C#");
- linkedList.AddAfter(nodeC, "Python");
- foreach(var item in linkedList)
- {
- Console.WriteLine("item = "+item);
- }
- linkedList.Remove("Java");
- linkedList.Remove(nodeC);
- linkedList.RemoveFirst();
- linkedList.RemoveLast();
- linkedList.Clear();
Queue是链表,先进先出,不能通过下标访问,泛型的使用保证类型安全,可以避免装箱拆箱,找元素就只能遍历,查找不方便,增删比较快。
例如,
- Console.WriteLine("***************Queue******************");
- Queue queue = new Queue();
- queue.Enqueue("C/C++");
- queue.Enqueue("C#");
- queue.Enqueue("Java");
- queue.Enqueue("Python");
- queue.Enqueue("CJavaPy");
- queue.Enqueue("JS");
- foreach (string item in queue)
- {
- Console.WriteLine(item);
- }
- Console.WriteLine($"Dequeuing '{queue.Dequeue()}'");
- Console.WriteLine($"Peek at next item to dequeue: { queue.Peek()}");
- Console.WriteLine($"Dequeuing '{queue.Dequeue()}'");
- Queue queueCopy = new Queue(queue.ToArray());
- foreach (string item in queueCopy)
- {
- Console.WriteLine(item);
- }
- Console.WriteLine($"queueCopy.Contains(\"c#\") = {queueCopy.Contains("c#")}");
- queueCopy.Clear();
- Console.WriteLine($"queueCopy.Count = {queueCopy.Count}");
注意:ConcurrentQueue 线程安全版本的Queue。
Stack是链表,先进后出,不能通过下标访问,泛型的使用保证类型安全,可以避免装箱拆箱,找元素就只能遍历,查找不方便,增删比较快。
例如,
- Console.WriteLine("***************Stack******************");
- Stack stack = new Stack();
- stack.Push("C/C++");
- stack.Push("C#");
- stack.Push("Java");
- stack.Push("Python");
- stack.Push("CJavaPy");
- stack.Push("JS");
- foreach (string item in stack)
- {
- Console.WriteLine(item);
- }
- Console.WriteLine($"Pop '{stack.Pop()}'");//获取并移除
- Console.WriteLine($"Peek at next item to dequeue: { stack.Peek()}");//获取不移除
- Console.WriteLine($"Pop '{stack.Pop()}'");
- Stack stackCopy = new Stack(stack.ToArray());
- foreach (string item in stackCopy)
- {
- Console.WriteLine(item);
- }
- Console.WriteLine($"stackCopy.Contains(\"C#\") = {stackCopy.Contains("C#")}");
- stackCopy.Clear();
- Console.WriteLine($"stackCopy.Count = {stackCopy.Count}");
注意:ConcurrentStack线程安全版本的Stack。