Trang chủ » Blog » [Thực hành] Triển khai lớp LinkedList đơn giản

[Thực hành] Triển khai lớp LinkedList đơn giản

bởi CodeGym | 26/12/2023 17:15 | Bài thực hành | Blog

Mục tiêu

Triển khai lớp LinkedList đơn giản- Luyện tập cài đặt cấu trúc LinkedList đơn giản.

Mô tả- Triển khai lớp LinkedList đơn giản

Trong phần này, chúng ta sẽ phát triển một chương trình cho phép cài đặt cấu trúc LinkedList đơn giản để lưu một tập dữ liệu bất kỳ. Chương trình gồm 2 lớp Node và LinkList như sơ đồ mô tả sau:

Lớp Node chứa thông tin về một node trong danh sách liên kết.

Bao gồm:

  • Thuộc tính data
  • Thuộc tính node đằng sau.
  • Phương thức đọc dữ liệu của node

Lớp LinkList bao gồm:

  • Node đầu tiên
  • Node cuối cùng
  • Số lượng node
  • Phương thức thêm một node vào đầu
  • Phương thức thêm một nốc vào phía sau
  • Phương thức lấy ra số lượng node
  • Phương thức đọc linkedlist

Hướng dẫn- Triển khai lớp LinkedList đơn giản 

Bước 1: Lớp Node: Tạo mới một tệp với tên Node.php

Mã PHP:

class Node
{
    /* Node data */
    public $data;

    /* Link to next node */
    public $next;

    function __construct($data)
    {
        $this->data = $data;
        $this->next = NULL;
    }

    function readNode()
    {
        return $this->data;
    }
}

Bước 2: Lớp LinkList: Tạo mới một tệp với tên LinkList.php

Mã PHP:

include_once ('Node.php');
class LinkList
{
    /* Link to the first node in the list */
    private $firstNode;

    /* Link to the last node in the list */
    private $lastNode;

    /* Total nodes in the list */
    private $count;

    function __construct()
    {
        $this->firstNode = NULL;
        $this->lastNode = NULL;
        $this->count = 0;
    }
}

Bước 3: Tạo phương thức thêm node vào đầu Danh sách

Mục đích: Thêm đối tượng vào vị trí đầu tiên trong danh sách

Tại lớp LinkList tạo phương thức insertFirst() để thêm một node vào phía đầu của danh sách

Mã PHP:

public function insertFirst($data)
{
    $link = new Node($data);
    $link->next = $this->firstNode;
    $this->firstNode = $link;

    /* If this is the first node inserted in the list
       then set the lastNode pointer to it.
    */
    if($this->lastNode == NULL)
        $this->lastNode = $link;

    $this->count++;
}

Ở đoạn code trên, ban đầu sẽ khởi tạo một node mới : $link = new Node($data);

Sau đó sẽ gán node kế sau của node mới khởi tạo là node đầu tiên của linklist: $link->next = $this->firstNode;

Câu lệnh $this->firstNode = $link; sẽ gán tiếp node đầu của danh sách là node mới khởi tạo.

Kiểm tra, nếu node mới khởi tạo là node đầu tiên được thêm vào danh sách thì sẽ đặt node đó là node cuối cùng của danh sách.

if($this->lastNode == NULL)
        $this->lastNode = $link;

Cuối cùng ta tăng kích thước của danh sách lên 1 đơn vị.

Bước 4: Tạo phương thức thêm node vào phía sau Danh sách

Mục đích: Thêm đối tượng vào vị trí cuối cùng trong danh sách

Mã PHP:

public function insertLast($data)
{
    if($this->firstNode != NULL) {
        $link = new Node($data);
        $this->lastNode->next = $link;
        $link->next = NULL;
        $this->lastNode = $link;
        $this->count++;
    }else {
        $this->insertFirst($data);
    }
}

Ở đoạn code trên, sẽ kiểm tra nếu danh sách đã tồn tại node bên trong thì sẽ khởi tạo một node mới  ($link = new Node($data);).

Sau đó gán node kế tiếp phía sau của node cuối cùng hiện tại là node mới khởi tạo ($this->lastNode->next = $link;).

Vì là node cuối cùng nên node kế phía sau sẽ được gán giá trị NULL ($link->next = NULL;).

Câu lệnh $this->lastNode = $link; có nghĩa là gán node mới khởi tạo là node cuối cùng của danh sách.

Sau đó tăng kích thước của danh sách lên một đơn vị.

Bước 5: Tạo phương thức lấy ra số lượng node

Mục đích: Lấy ra số lượng các node được thêm vào danh sách

Mã PHP:

public function totalNodes()
{
    return $this->count;
}

Bước 6: Tạo phương thức đọc ra Danh sách

Mục đích: Hiển thị danh sách các phần tử trong danh sách

Mã PHP:

public function readList()
{
    $listData = array();
    $current = $this->firstNode;

    while($current != NULL)
    {
        array_push($listData, $current->readNode());
        $current = $current->next;
    }
    return $listData;
}

Bước 7: Tạo lớp để chạy thử

Tạo một file với tên LinkedListMain.php và khởi tạo một đối tượng LinkedList. Sau đó gọi đến các phương thức để thêm các phần tử mới vào phía đầu và cuối , sau đó lấy ra tổng số lượng node, cuối cùng hiển thị toàn bộ các phần tử của LinkedList ra.

Mã PHP:

include_once ('LinkList.php');

$linkedList = new LinkList();

$linkedList->insertFirst(11);
$linkedList->insertFirst(22);
$linkedList->insertLast(33);
$linkedList->insertLast(44);
$totalNodes = $linkedList->totalNodes();
$linkData = $linkedList->readList();

echo $totalNodes;
echo implode ('-' , $linkData); 

Chạy chương trình, quan sát kết quả.

Mã nguồn tham khảo: https://github.com/codegym-vn/php-linkedlist

Tổng kết

Qua bài tập trên chúng ta đã luyện tập:

  • Kỹ năng cài đặt một LinkedList đơn giản

Trên đây CodeGym đã cùng với bạn luyện tập cài đặt cấu trúc LinkedList đơn giản. Hãy chụp ảnh màn hình và nộp bài thực hành của bạn trên CodeGymX để cùng nhau luyện tập nhé!

Download - Giáo trình thuật toán

10 + 5 =

Tags:

0 Lời bình

Gửi Lời bình

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

BÀI VIẾT LIÊN QUAN

BẠN MUỐN HỌC LẬP TRÌNH?

GỌI NGAY

098 953 44 58

Đăng ký tư vấn lộ trình học lập trình

Đăng ký tư vấn, định hướng lộ trình học và giải đáp các thắc mắc về ngành nghề – Miễn phí – Online.

5 + 10 =

TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM
TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM