Двусвязный циклический список - C#

Узнай цену своей работы

Формулировка задачи:

Вводятся элементы двусвязного циклического списка - числа, при добавлении в список положительные вставляются в начало, отрицательные - в конец. Нужно разделить исходный список на два так, чтобы в исходном остались положительные, а отрицательные вставились во второй.
//Удаляет отрицательные элементы, возвращает ссылку на первый отрицательный элемент
        public DoubleNode DeleteNegative()
        {
            DoubleNode n;
            DoubleNode h;
            n = head.Next;
            while ((n!=head)&&(n.Next.Number>0))
            {
                n = n.Next;
            }
            h = n.Next;
            head.Prev=n;
            n.Next = head;                      
            return h;
        }
        
        public void GetSecondList(DoubleNode n, DoubleNode q)
        {           
            head.Next = n;
            n.Prev=head;
            q.Next = head;
            head.Prev = q;                    
        }
//класс формы
        private void разделитьToolStripMenuItem_Click(object sender, EventArgs e)
        {         
            DoubleNode n = Data.L.DeleteNegative();
            DoubleNode q = Data.L.FindEnd;
            Data.L2.GetSecondList(n,q);
        }

Решение задачи: «Двусвязный циклический список»

textual
Листинг программы
class CycleDoubleLinkedList
    {
        private DoubleNode head;     
 
        public DoubleNode Head
        {
            get { return head; }
            set { head = value; }
        }
 
        public CycleDoubleLinkedList()
        {
            head = new DoubleNode();
            head.Next = head;
            head.Prev = head;
        }
//вставка в начало
        public void InsertAfter(DoubleNode p, int number)
        {
            if (p != null)
            {
                DoubleNode q = new DoubleNode(number);
                q.Next = p.Next;
                p.Next = q;
                q.Prev = p;
                q.Next.Prev = q;
            }
        }
//вставка в конец
        public void InsertBefore(int number)
        {
            InsertAfter(head, number);
        }
 
        public int Length()
        {
            int i = 0;
            DoubleNode p = head.Next;
            while (p != head) { i++; p = p.Next; }       
            return i;
 
        }
 
         public DoubleNode Return1()
        {
            DoubleNode p = head.Next;
            return p;
        }
 
        public DoubleNode ReturnHead()
        {
            DoubleNode p = head;
            return p;
        }
 
        public DoubleNode find1(int pos)
        {
            DoubleNode p = head.Next;
            int i = 0;
            while ((i < pos) && (p != null))
            {
                p = p.Next;
                i++;
            }
            if (i != pos) throw new Exception();
            return p;
        }
 
        public string get(int i)
        {
            DoubleNode temp = find1(i);
            string s;
            s = temp.Number + "  ";
            return s;
        }
 
        public DoubleNode FindEnd
        {
            get
            {
                DoubleNode p;
                p = head;
                while ((p != null) && (p.Next != head))
                {
                    p = p.Next;
                }
                return p;
            }
        }
 
        public void Delete(DoubleNode p)
        {
            if (p != null)
            {
                p.Prev.Next = p.Next;
                p.Next.Prev = p.Prev;
                p = null;
            }
        }
 
        public void remove1(int pos)
        {
            Delete(find1(pos));
        }
 
        public string printnumber(int i)
        {
            DoubleNode temp = find1(i);
            string s;
 
            s = temp.Number + "  ";
            return s;
        }      
        //Удаляет отрицательные элементы, возвращает ссылку на первый отрицательный элемент
        public DoubleNode DeleteNegative()
        {
            DoubleNode n;
            DoubleNode h;
            n = head.Next;
            while ((n!=head)&&(n.Next.Number>0))
            {
                n = n.Next;
            }
            h = n.Next.Next;
            head.Prev=n;
            n.Next = head;                      
            return h;
        }
        
        public void GetSecondList(DoubleNode n, DoubleNode q)
        {           
            head.Next = n;
            n.Prev=head;
            q.Next = head;
            head.Prev = q;                    
        }
 
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы