public LinkedListQueue(IEnumerable <T> collection) { if (collection == null) { throw new ArgumentNullException(nameof(collection)); } items = new CircularDoublyLinkedList <T>(collection); }
public static Polygon2 Convexhull(IEnumerable <Vector2> vertices) { var pts = vertices.ToArray(); if (!pts.Any()) { return(new Polygon2()); } // Sort points lexicographically by increasing (x, y) int n = pts.Length; Polysort.Quicksort(pts); var left = pts[0]; var right = pts[n - 1]; // Partition into lower hull and upper hull var lower = new CircularDoublyLinkedList <Vector2>(left); var upper = new CircularDoublyLinkedList <Vector2>(left); for (int i = 0; i < n; i++) { double det = Vector2.Area2(left, right, pts[i]); if (det > 0) { upper = upper.Append(new CircularDoublyLinkedList <Vector2>(pts[i])); } else if (det < 0) { lower = lower.Prepend(new CircularDoublyLinkedList <Vector2>(pts[i])); } } lower = lower.Prepend(new CircularDoublyLinkedList <Vector2>(right)); upper = upper.Append(new CircularDoublyLinkedList <Vector2>(right)).Next; // Eliminate points not on the hull Eliminate(lower); Eliminate(upper); // Eliminate duplicate endpoints if (lower.Prev.Value.Equals(upper.Value)) { lower.Prev.Delete(); } if (upper.Prev.Value.Equals(lower.Value)) { upper.Prev.Delete(); } // Join the lower and upper hull var res = new Vector2[lower.Size() + upper.Size()]; lower.CopyInto(res, 0); upper.CopyInto(res, lower.Size()); return(new Polygon2(res)); }
public void AddNullItem() { var list = new CircularDoublyLinkedList <string>(); list.AddFirst(null); list.AddLast(null); list.AddAfter(null, null); list.AddBefore(null, null); Assert.AreEqual(list.Count(), 4, "invalid count"); list.Remove(null); list.RemoveFirst(); list.RemoveLast(); Assert.AreEqual(list.Count(), 1, "invalid count"); }
public static void Main() { DoublyLinkedList <int> doublyLinkedList = new DoublyLinkedList <int>(); doublyLinkedList.Add(1); doublyLinkedList.Add(2); doublyLinkedList.Add(3); doublyLinkedList.Add(4); doublyLinkedList.Add(5); doublyLinkedList.InsertAfter(5, 99); doublyLinkedList.Delete(5); Console.WriteLine(doublyLinkedList.Contains(5)); foreach (object item in doublyLinkedList) { Console.WriteLine(item); } foreach (object item in doublyLinkedList.Reverse()) { Console.WriteLine(item); } CircularDoublyLinkedList <int> circularDoublyLinkedList = new CircularDoublyLinkedList <int>(); circularDoublyLinkedList.Add(1); circularDoublyLinkedList.Add(2); circularDoublyLinkedList.Add(3); circularDoublyLinkedList.Add(4); circularDoublyLinkedList.Add(5); circularDoublyLinkedList.Delete(3); circularDoublyLinkedList.InsertAfter(2, 99); Console.WriteLine(circularDoublyLinkedList.Contains(3)); foreach (object item in circularDoublyLinkedList) { Console.WriteLine(item); } }
// Graham's scan private static void Eliminate(CircularDoublyLinkedList <Vector2> start) { CircularDoublyLinkedList <Vector2> v = start, w = start.Prev; bool fwd = false; while (v.Next != start || !fwd) { if (v.Next == w) { fwd = true; } if (Vector2.Area2(v.Value, v.Next.Value, v.Next.Next.Value) < 0) // right turn { v = v.Next; } else // left turn or straight { v.Next.Delete(); v = v.Prev; } } }
public void TestCleanup() { this.circularDoublyLinkedList = null; }
public void TestInitialize() { this.circularDoublyLinkedList = new CircularDoublyLinkedList <int>(); }
public void AddNullCollection() { var list = new CircularDoublyLinkedList <int>(null); }
public override void Clear() { items.Clear(); items = new CircularDoublyLinkedList <T>(); }
public LinkedListQueue() { items = new CircularDoublyLinkedList <T>(); }