예제 #1
0
 public void DeleteNode(DoubleNode p)
 {
     if (Head != null && Head.Next != Head && Head.Prev != Head && p != null) // установлена?
     {
         p.Prev.Next = p.Next;                                                // изменить поле связи предыдущего узла
         p.Next.Prev = p.Prev;                                                // изменить поле связи следующего узла
     }
 }
예제 #2
0
        public void Print(CycleDoubleLinkedList Q)
        {
            DoubleNode p = Head.Next;

            while (p != Head)
            {
                Console.Write(p.Info + " ");
                p = p.Next;
            }
        }
예제 #3
0
 public void Create(int[] dates) // cоздание циклического списка
 {
     for (int i = 0; i < dates.Length; i++)
     {
         DoubleNode p = new DoubleNode(dates[i]);
         p.Next         = Head;
         p.Prev         = Head.Prev;
         Head.Prev.Next = p;
         Head.Prev      = p;
     }
 }
예제 #4
0
 public void InsertAfter(DoubleNode p, int data)
 {
     {
         if (p != null)
         {
             DoubleNode q = new DoubleNode(data);
             q.Next      = p.Next;
             p.Next.Prev = q;
             p.Next      = q;
             q.Prev      = p;
         }
     }
 }
예제 #5
0
        public void DeleteNodeNeedInfo(int data)
        {
            DoubleNode p = Head.Next;

            while (p != Head)
            {
                if (p.Info == data)
                {
                    p.Prev.Next = p.Next;
                    p.Next.Prev = p.Prev;
                }
                p = p.Next;
            }
        }
예제 #6
0
 public void CreateSort(int[] dates)
 {
     for (int i = 0; i < dates.Length; i++)
     {
         DoubleNode p = Head.Next;
         DoubleNode q = new DoubleNode(dates[i]);
         while (p != Head && q.Info >= q.Info)
         {
             p = p.Next;
         }
         q.Next      = p;
         q.Prev      = p.Prev;
         p.Prev.Next = q;
         p.Prev      = q;
     }
 }
예제 #7
0
        public CycleDoubleLinkedList(int[] datas)
        {
            if (Head == null)
            {
                Head.Next = Head;
                Head.Prev = Head;
            }
            var q = Head;

            for (int i = 1; i < datas.Length; i++)
            {
                DoubleNode p = new DoubleNode(datas[i]);
                q.Next    = p;
                Head.Prev = q.Next;
                p.Next    = Head;
                p.Prev    = q;
                q         = q.Next;
            }
        }
예제 #8
0
        public void Test(CycleDoubleLinkedList Q)
        {
            DoubleNode p  = Head.Next;
            DoubleNode q  = Q.Head.Next;
            DoubleNode q1 = Q.Head.Next.Next;

            while (p != Head && q.Next != Q.Head)
            {
                if (q1 != Head)
                {
                    q.Next      = p.Next;
                    p.Next.Prev = q;
                    q.Prev      = p;
                    p.Next      = q;
                    p           = p.Next.Next;
                    q           = q1;
                    q1          = q1.Next;
                }
            }
            q.Next      = p.Next;
            p.Next.Prev = q;
            q.Prev      = p;
            p.Next      = q;
        }
예제 #9
0
 }                              // ссылка на головной узел списка
 public CycleDoubleLinkedList() // создание элементарного двусвязного кольца
 {
     Head      = new DoubleNode();
     Head.Next = Head;
     Head.Prev = Head;
 }
예제 #10
0
 public DoubleNode(int info, DoubleNode next, DoubleNode prev) : this(info)
 {
     Next = next;
     Prev = prev;
 }