Advertisement
Guest User

Untitled

a guest
May 24th, 2020
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.75 KB | None | 0 0
  1. // Link
  2.  
  3. using System;
  4.  
  5. namespace DoublyLinkedList
  6. {
  7.     public class Link<T> : IComparable<Link<T>> where T : IComparable<T>
  8.     {
  9.         public T Data { get; set; }
  10.         public Link<T> Next { get; set; }
  11.         public Link<T> Previous { get; set; }
  12.         public Link() { Next = null; Previous = null; }
  13.         public Link(T d) { Data = d; Next = null; Previous = null; }
  14.         public void DisplayLink()
  15.         { Console.Write(Data.ToString() + " "); }
  16.         public int CompareTo(Link<T> other) { return Data.CompareTo(other.Data); }
  17.         public int CompareTo(T other) { return Data.CompareTo(other); }
  18.     }
  19. }
  20.  
  21. //DoublyLinkedList
  22.  
  23. using System;
  24.  
  25. namespace DoublyLinkedList
  26. {
  27.     public class DoublyLinkedList<T> where T : IComparable<T>
  28.     {
  29.         public Link<T> First { get; set; }
  30.         public Link<T> Last { get; set; }
  31.         public DoublyLinkedList(){ First = null;Last = null; }
  32.         public bool IsEmpty()
  33.         { return First == null; }
  34.         public Link<T> Find(T key)
  35.         {
  36.             if (IsEmpty()) return null;
  37.             Link<T> current = First;
  38.             while(current.CompareTo(key) != 0)
  39.             {
  40.                 if (current.Next == null)
  41.                     return null;
  42.                 else
  43.                     current = current.Next;
  44.             }
  45.             return current;
  46.         }
  47.         public void InsertFirst(T dd)
  48.         {
  49.             Link<T> newLink = new Link<T>(dd);
  50.             if (IsEmpty())
  51.                 Last = newLink;
  52.             else
  53.                 First.Previous = newLink;
  54.             newLink.Next = First;
  55.             First = newLink;
  56.         }
  57.         public void InsertLast(T dd)
  58.         {
  59.             Link<T> newLink = new Link<T>(dd);
  60.             if (IsEmpty())
  61.                 First = newLink;
  62.             else
  63.             {
  64.                 Last.Next = newLink;
  65.                 newLink.Previous = Last;
  66.             }
  67.             Last = newLink;
  68.         }
  69.         public Link<T> DeleteFirst()
  70.         {
  71.             if (IsEmpty()) return null;
  72.             Link<T> temp = First;
  73.             if (First.Next == null)
  74.                 Last = null;
  75.             else
  76.                 First.Next.Previous = null;
  77.             First = First.Next;
  78.             return temp;
  79.         }
  80.         public Link<T> DeleteLast()
  81.         {
  82.             if (IsEmpty()) return null;
  83.             Link<T> temp = Last;
  84.             if (First.Next == null)
  85.                 First = null;
  86.             else
  87.                 Last.Previous.Next = null;
  88.             Last = Last.Previous;
  89.             return temp;
  90.         }
  91.         public bool InsertAfter(T key, T dd)
  92.         {
  93.             Link<T> current = Find(key);
  94.             if (current == null) return false;
  95.             Link<T> newLink = new Link<T>(dd);
  96.             if(current == Last)
  97.             {
  98.                 newLink.Next = null;
  99.                 Last = newLink;
  100.             }
  101.             else
  102.             {
  103.                 newLink.Next = current.Next;
  104.                 current.Next.Previous = newLink;
  105.             }
  106.             newLink.Previous = current;
  107.             current.Next = newLink;
  108.             return true;
  109.         }
  110.         public void Insert(T key)
  111.         {
  112.             Link<T> newLink = new Link<T>(key);
  113.             Link<T> previous = null;
  114.             Link<T> current = First;
  115.             while(current != null && current.CompareTo(key) < 0)
  116.             {
  117.                 previous = current;
  118.                 current = current.Next;
  119.             }
  120.             if (previous == null)
  121.                 First = newLink;
  122.             else
  123.                 previous.Next = newLink;
  124.             newLink.Next = current;
  125.             //Poprawka dla listy dwukierunkowej
  126.             if (current == null)
  127.                 Last = newLink;
  128.             else
  129.                 current.Previous = newLink;
  130.             newLink.Previous = previous;
  131.         }
  132.         public Link<T> DeleteKey(T key)
  133.         {
  134.             Link<T> current = Find(key);
  135.             if (current == null) return null;
  136.             if (current == First)
  137.                 First = current.Next;
  138.             else
  139.                 current.Previous.Next = current.Next;
  140.             if (current == Last)
  141.                 Last = current.Previous;
  142.             else
  143.                 current.Next.Previous = current.Previous;
  144.             return current;
  145.         }
  146.         public void DisplayForward()
  147.         {
  148.             Console.Write("List (first-->last): ");
  149.             Link<T> current = First;
  150.             while(current != null)
  151.             {
  152.                 current.DisplayLink();
  153.                 current = current.Next;
  154.             }
  155.             Console.WriteLine();
  156.         }
  157.         public void DisplayBackward()
  158.         {
  159.             Console.Write("List (last-->first): ");
  160.             Link<T> current = Last;
  161.             while (current != null)
  162.             {
  163.                 current.DisplayLink();
  164.                 current = current.Previous;
  165.             }
  166.             Console.WriteLine();
  167.         }
  168.     }
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement