.
Отговор в тема
Резултати от 1 до 2 от общо 2
  1. #1
    Голям фен
    Регистриран на
    Mar 2005
    Град
    Plovdiv
    Мнения
    872

    Задача със свързани списъци на C

    Здравейте, имам една задача за свързани списъци която ме мъчи. Ето я:

    Код:
    Дадени са указатели Х и T към възли от кръгов списък; напишете кодов фрагмент, който премества възела, следващ Т, към позиция, следваща възела, който следва Х в списъка.
    Не искам да ми пишете самата програма, но ако има някои с идеи покрай алгоритъма й, ще се радвам да ги сподели с мен Нещо не ги чаткам много тези свързани списъци

  2. #2
    Guest

    Re: Задача със свързани списъци на C

    Цитирай Първоначално написано от Fena
    Здравейте, имам една задача за свързани списъци която ме мъчи. Ето я:

    Код:
    Дадени са указатели Х и T към възли от кръгов списък; напишете кодов фрагмент, който премества възела, следващ Т, към позиция, следваща възела, който следва Х в списъка.
    Не искам да ми пишете самата програма, но ако има някои с идеи покрай алгоритъма й, ще се радвам да ги сподели с мен Нещо не ги чаткам много тези свързани списъци
    може би нещо такова
    Код:
    // List.h
    // Dev C++
    
    template <typename Object>
    class List
    {  private:
         class Node
         { public:
             Object info;
             Node* next;
             Node(const Object x = Object())
               : info(x), next(NULL) { }
         };
    
         typedef Node* NodePtr;
    
         NodePtr first, last;
    
       public:
         List(){ first = last = NULL; }
    
         List(const List & L)
         { first = last = NULL;
           NodePtr p=L.first;
           while(p!=NULL)
           { push_back(p->info);
             p = p->next;
           }
         }
    
         List& operator=(const List &L)
         { if(this != &L)
           { clear();
             NodePtr p=L.first;
             while(p!=NULL)
             { push_back(p->info);
               p = p->next;
             }
           }
           return *this;
         }
    
         ~List() { clear(); }
    
         bool empty() const
         { return first==NULL; }
    
    
    
         void push_front(const Object & x)
         { NodePtr p = new Node(x);
           if(first==NULL) first = last = p;
           else
           { p->next = first;
             first = p;
           }
         }
    
         void push_back(const Object & x)
         { NodePtr p = new Node(x);
           if(first==NULL) first = last = p;
           else       last = last->next = p;
         }
    
         Object & front()
         { if(first!=NULL) return first->info; }
    
         Object & back()
         { if(last!=NULL) return last->info; }
    
         void pop_front()
         { if(first!=NULL)
           { first = first->next;
             if(first==NULL) last=NULL;
           }
         }
    
         void pop_back()
         { if(first==NULL) return;
           if(first==last)
           { pop_front(); return; }
    
           NodePtr p=first;
           NodePtr q=p->next;;
           while(q!=last)
           { p = q; q = p->next; }
           delete last;
           last = p;
           last->next = NULL;
         }
    
         void clear()
         { while(first!=NULL) pop_front(); }
         
        /* тук са останалите методи които са ти необходими
            например метод за сортиране, за сливане на списъци, от и към  файл и т.н.    
         . . . 
         . . . 
       */
    
         void MoveNode(NodePtr, NodePtr);
    };
    
    // --------------------------------------
    
    template <typename Object>
    void List<Object>::MoveNode(NodePtr T, NodePtr X)
    {
       NodePtr p = T->next;
       NodePtr q = X->next;
       
       T = p->next;
       X->next = p;
       p->next = q;  
    }
    не съм го тествал този код, но когато се поосвободя ще седна да го дообмисля. Преди време си правих собствени реализации на почти всички основни структури от данни, но скоро не съм се занимавал.
    Тъй като не е упоменат език, реших да използвам C++ като това е част от реализацията на едносвързан списък. Разгледай метода MoveNode(NodePtr T, NodePtr X) мисля, че това ти трябва, останалото е бонус

    Успех!

Правила за публикуване

  • Вие не можете да публикувате теми
  • Вие не можете да отговаряте в теми
  • Вие не можете да прикачвате файлове
  • Вие не можете да редактирате мненията си