Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Создание двусвязного списка
 
 автор: Yustys   (09.11.2015 в 14:07)   письмо автору
 
 

Добрый день. Получил задание, организовать двусвязный список из элементов. Стал читать литературу, ничего не могу найти... помогите разобраться что такое двусвязный список на php, и как его реализовать на простых примерах?

  Ответить  
 
 автор: Valick   (09.11.2015 в 14:09)   письмо автору
 
   для: Yustys   (09.11.2015 в 14:07)
 

спросите у того кто дал вам это задание

http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/22/2206.htm

  Ответить  
 
 автор: Yustys   (09.11.2015 в 14:17)   письмо автору
 
   для: Valick   (09.11.2015 в 14:09)
 

Дал задание офицер-программист со стажем, хотят проверить мои знания, но как я уже вижу... не только мои знания здесь имеют серьезный пробел..

  Ответить  
 
 автор: tonik992   (10.11.2015 в 02:08)   письмо автору
 
   для: Yustys   (09.11.2015 в 14:17)
 

Офицер ? Что-то новенькое.. Так это что, скоро программисты начнут носить погоны?

  Ответить  
 
 автор: cheops   (10.11.2015 в 06:51)   письмо автору
 
   для: Yustys   (09.11.2015 в 14:07)
 

<?php
  
class ListLink {
    
// Предыдущий элемент
    
public $next null;
    
// Следующий элемент
    
public $prev null;
    
// Полезная нагрузка
    
public $value null;

    public function 
__construct($value 0$element null) {
      if(isset(
$element)) {
        
// Если передан элемент, вставляем новый в конце очереди
        
$this->next null;
        
$this->prev $element;
        
$element->next $this;
      } else {
        
// Если элемент пуст, считаем новый элемент началом очереди
        
$this->next null;
        
$this->prev null;
      }
      
$this->value $value;
    }

    public function 
addAfter($element) {
      
$element->prev $this;
      
$element->next $this->next;

      if(isset(
$this->next))
        
$this->next->prev $element;
      
$this->next $element;
    }

    public function 
addBefore($element) {
      
$element->next $this;
      
$element->prev $this->prev;

      if(isset(
$this->prev))
        
$this->prev->next $element;
      
$this->prev $element;
    }

    public function 
deleteNext() {
      if(isset(
$this->next)) {
        if(isset(
$this->next->next)) {
          
$this->next->next->prev $this;
        }
        
$this->next $this->next->next;
      }
    }

    public function 
deletePrev() {
      if(isset(
$this->prev)) {
        if(isset(
$this->prev->perv)) {
          
$this->prev->prev->next $this;
        }
        
$this->prev $this->prev->prev;
      }
    }

    public function 
printForward() {
      echo 
$this->value."<br />";
      if(isset(
$this->next))
        
$this->next->printForward();
    }

    public function 
printBackward() {
      echo 
$this->value."<br />";
      if(isset(
$this->prev))
        
$this->prev->printBackward();
    }

  }

  
$list = new ListLink(3);
  
$list->addAfter(new ListLink(10));
  
$list->addAfter(new ListLink(7));
  
$list->addAfter(new ListLink(4));
  
$list->deleteNext();
  
$list->printForward();
?>

  Ответить  
 
 автор: Trianon   (10.11.2015 в 10:25)   письмо автору
 
   для: cheops   (10.11.2015 в 06:51)
 

В классическом двусвязном списке цепочки ссылок не заканчиваются null, а закольцовываются.
В частности дескриптор пустого списка - элемент, обе ссылки которого указывают на себя самого.
Такое построение изрядно упрощает операции вставки и удаления элементов.
Фактически, исчезают все условные операторы.

  Ответить  
 
 автор: cheops   (10.11.2015 в 10:52)   письмо автору
 
   для: Trianon   (10.11.2015 в 10:25)
 

Ага, но в PHP ниже версии 5.3 лучше ничего не закольцовывать, иначе память течь будет. В PHP 5.3 появился новый сборщик мусора, который нормально справляется с кольцевыми ссылками, в нем уже можно полноценную реализацию делать.

  Ответить  
 
 автор: Yustys   (11.11.2015 в 19:31)   письмо автору
 
   для: cheops   (10.11.2015 в 10:52)
 

Спасибо Вам большое, буду вникать. Всего Вам самого лучшего!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования