[Bài đọc] Lớp SplDoublyLinkedList

Tổng quan

Lớp SplDoublyLinkedList cung cấp các chức năng chính của một danh sách liên kết đôi.

Mô tả rút gọn của lớp này như sau:

SplDoublyLinkedList implements Iterator , ArrayAccess , Countable { 
   /* Constants */  
  const integer IT_MODE_LIFO = 2 ;  
  const integer IT_MODE_FIFO = 0 ; 
   const integer IT_MODE_DELETE = 1 ;
    const integer IT_MODE_KEEP = 0 ;  
  /* Methods */ 
   public __construct ( void )   
 public add ( mixed $index , mixed $newval ) : void  
 
 public bottom ( void ) : mixed  
  public count ( void ) : int   
 public current ( void ) : mixed  
  public getIteratorMode ( void ) : int   
 public isEmpty ( void ) : bool 
   public key ( void ) : mixed   
 public next ( void ) : void   
 public offsetExists ( mixed $index ) : bool
    public offsetGet ( mixed $index ) : mixed  
  public offsetSet ( mixed $index , mixed $newval ) : void  
  public offsetUnset ( mixed $index ) : void  
  public pop ( void ) : mixed   
 public prev ( void ) : void  

  public push ( mixed $value ) : void 
   public rewind ( void ) : void   
 public serialize ( void ) : string 
   public setIteratorMode ( int $mode ) : void 
   public shift ( void ) : mixed   
 public top ( void ) : mixed  
  public unserialize ( string $serialized ) : void   
 public unshift ( mixed $value ) : void  
  public valid ( void ) : bool}

Các hằng số

Trật tự duyệt

  • SplDoublyLinkedList::IT_MODE_LIFO
    • Danh sách sẽ được duyệt theo trật tự Last-In/First-Out, giống như stack
  • SplDoublyLinkedList::IT_MODE_FIFO
    • Danh sách sẽ được duyệt theo trật tự First-In/First-Out, giống như queue

Chế độ duyệt

  • SplDoublyLinkedList::IT_MODE_DELETE
    • Phần tử được duyệt sẽ bị xoá khỏi danh sách.
  • SplDoublyLinkedList::IT_MODE_KEEP
    • Phần tử được duyệt sẽ không bị xoá khỏi danh sách.

Các phương thức

SplDoublyLinkedList::addThêm/chèn một giá trị vào một vị trí nhất định
SplDoublyLinkedList::bottomLấy về một node ở phần đầu của danh sách
SplDoublyLinkedList::__constructTạo một danh sách liên kết đôi mới
SplDoublyLinkedList::count Đếm số lượng phần tử trong danh sách
SplDoublyLinkedList::currentTrả về phần tử hiện tại
SplDoublyLinkedList::getIteratorModeTrả về chế độ duyệt hiện tại
SplDoublyLinkedList::isEmptyKiểm tra xem danh sách có rỗng hay không
SplDoublyLinkedList::keyTrả về chỉ số của vị trí hiện tại
SplDoublyLinkedList::nextDi chuyển đến phần tử tiếp theo
SplDoublyLinkedList::offsetExistsKiểm tra xem chỉ số được truyền vào có tồn tại hay không
SplDoublyLinkedList::offsetGetTrả về giá trị tại một chỉ số nhất đinh
SplDoublyLinkedList::offsetSetThay đổi giá trị của một node tại vị trí nhất định
SplDoublyLinkedList::offsetUnsetLoại bỏ giá trị tại một vị trí nhất định
SplDoublyLinkedList::popLấy về node ở phần cuối của danh sách
SplDoublyLinkedList::prevDi chuyển đến phần tử trước đó
SplDoublyLinkedList::pushThêm một phần tử vào đuôi của danh sách
SplDoublyLinkedList::rewindChuyển con trỏ về phần đầu của danh sách
SplDoublyLinkedList::setIteratorModeThay đổi chế đọ duyệt
SplDoublyLinkedList::shiftDịch chuyển một node từ phần đầu của danh sách
SplDoublyLinkedList::top Lấy về phần tử ở đuôi của danh sách
SplDoublyLinkedList::unshiftChèn vào một phần tử vào phần đầu của danh sách
SplDoublyLinkedList::validKiểm tra xem liệu danh sách có còn chứa node nào nữa hay không

Sử dụng SplDoublyLinkedList

Khởi tạo một SplDoublyLinkedList mới:

$dlist=new SplDoublyLinkedList();

Thêm các phần tử vào phần cuối của danh sách:

$dlist->push('hiramariam');
$dlist->push('maaz');
$dlist->push('zafar');

Danh sách bây giờ chứa 3 phần tử là: 

hiramariam
maaz
zafar

Thêm các phần tử vào phần đầu của danh sách:

$dlist->unshift(1);
$dlist->unshift(2);
$dlist->unshift(3);

Danh sách bây giờ chứa 6 phần tử là:

3
2
1
hiramariam
maaz
zafar

Chúng ta có thể xoá một phần tử khỏi phần đuôi của danh sách:

$dlist->pop();

Danh sách bây giờ chứa 5 phần tử:

3
2
1
hiramariam
maaz

Chúng ta có thể xoá một phần tử khỏi phần đầu của danh sách:

$dlist->shift();

Danh sách bây giờ chứa 4 phần tử:

2
1
hiramariam
maaz

Chúng ta có thể thay đổi một phần tử ở một vị trí nhất định:

$dlist->add(3 , 2.24);

Chúng ta có thể duyệt qua danh sách bằng cách sử dụng một vòng lặp for:

for($dlist->rewind();
$dlist->valid();
$dlist->next()){    echo $dlist->current()."<br/>";}echo "<br/>";

Để duyệt theo chiều ngược lại, chúng ta có thể thay đổi chế độ:

$dlist->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO);
for($dlist->rewind();$dlist->valid();$dlist->next()){   
 echo $dlist->current()."<br/>";;
}

Lưu ý: Học viên tra cứu đầy đủ lớp SplDoublyLinkedList ở đây: https://www.php.net/manual/en/class.spldoublylinkedlist.php

Leave a Reply

Your email address will not be published. Required fields are marked *