danh sách liên kết đơn

Khái niệm danh sách liên kết đơn vào vai trò cần thiết trong số thao tác lập trình sẵn. Ứng dụng nó mang đến là vô nằm trong rộng lớn. Vì thế độc giả nếu còn muốn mò mẫm hiểu ngành này thì ko thể bỏ lỡ những kỹ năng về danh sách liên kết đơn. Bài viết lách sau kể từ Teky tiếp tục giúp đỡ bạn phát âm mò mẫm hiểu thêm thắt vấn đề về chủ thể này như khái niệm, điểm sáng và cơ hội thiết đặt danh sách liên kết đơn.

Tìm hiểu về list liên kết

Trước khi mò mẫm hiểu về danh sách liên kết đơn, tao tiếp tục chính thức với list links trước. Để mang đến dễ dàng tưởng tượng, chúng ta có thể hiểu list links vô C sở hữu tính năng khá giống như với cùng 1 mảng. Tuy nhiên vẫn đang còn những điểm khác lạ chắc chắn. Cách phân biệt list links và mảng như sau:

Bạn đang xem: danh sách liên kết đơn

Nội dung Mảng Danh sách liên kết
Kích thước

(Danh sách links lúc lắc ưu thế)

  • Kích thước được cố định và thắt chặt từng lúc
  • Trong khi khai báo cần thiết chứng tỏ kích thước
  • Kích thước thay cho thay đổi liên tiếp vô quy trình thêm thắt, hạn chế phân tử.
  • Kích thước tối nhiều chỉ tùy theo cỗ nhớ
Cấp phân phát cỗ nhớ

(Danh sách links lúc lắc ưu thế)

  • Tĩnh: Sở ghi nhớ được cấp cho theo dõi cơ chế vô quy trình biên dịch.
  • Động: Sở ghi nhớ được cấp cho theo dõi cơ chế vô quy trình khởi chạy.
Thứ tự động và cơ hội chuẩn bị xếp

(Danh sách links lúc lắc ưu thế)

  • Được khắc ghi bên trên một mặt hàng những dù ghi nhớ ngay lập tức kề
  • Được khắc ghi bên trên những dù ghi nhớ bất kỳ
Truy cập

(Mảng lúc lắc ưu thế)

  • Bằng cơ hội dùng chỉ số mảng, được chấp nhận truy vấn cho tới một thành phần ngẫu nhiên: O(1)
  • Muốn truy vấn cho tới thành phần tình cờ rất cần phải trải qua loa quy trình duyệt từ trên đầu cho tới cuối thành phần đó: O(n)
Tìm kiếm

(Mảng lúc lắc ưu thế)

  • Có thể mò mẫm tìm kiếm vày 2 ngôn từ tuyến tính và nhị phân
  • Chỉ rất có thể mò mẫm tìm kiếm vày tuyến tính

Danh sách links đơn (Single linked list) là 1 trong vô 3 phân loại của list links C++.

dang-ky-lap-trinh

Danh sách links đơn còn được gọi là Single Linked List. Nó được dùng làm có một cấu hình tài liệu địa hình hoặc còn rất có thể tưởng tượng như 1 list nhưng mà vô cơ từng thành phần đều links với thành phần đứng sau nó.

Mô hình danh sách liên kết đơn
Mô hình danh sách liên kết đơn

Single Linked List được sử dụng thông dụng với ngôn từ lập trình sẵn C++. Trong Linked List C++, từng thành phần được kết cấu nên kể từ nhị bộ phận chủ yếu. Đó là bộ phận tài liệu và bộ phận links. Thành phần tài liệu phụ trách tàng trữ vấn đề về bạn dạng thân thiết thành phần cơ. Còn bộ phận links sẽ hỗ trợ lưu địa điểm của thành phần đứng sau thành phần đơn vị cơ. Nếu thành phần được xét đang được đứng cuối list thì bộ phận links tiếp tục vày NULL. Một thành phần hoàn hảo được cấu trở thành kể từ data (dữ liệu) và pointer (liên kết) sẽ tiến hành gọi là 1 trong node (hay còn được gọi là nút).

>>>Mời các bạn xem thêm thêm: Sử dụng MongoDB như vậy nào? Ưu điểm yếu kém khi sử dụng

Đặc điểm của danh sách liên kết đơn

Tính cấp phép tài liệu động

Trong khi chạy lịch trình, Single links list C++ sẽ tiến hành cấp phép bộ nhớ lưu trữ. Các thành phần được tàng trữ một cơ hội tình cờ vô RAM. Khi thêm thắt hoặc hạn chế thành phần, độ dài rộng của list cũng tiếp tục thay cho thay đổi. Kích thước tối nhiều của Single linked list vô c++ tùy theo bộ nhớ lưu trữ khả dụng của RAM.

Tính links của thành phần đầu và thành phần đứng sau

Vì sở hữu sự links thân thiết nhị phần đứng trước đứng sau nên chỉ việc bắt được vấn đề của thành phần trước tiên và thành phần ở đầu cuối là người tiêu dùng rất có thể đơn giản dễ dàng quản lý và vận hành được cả list. Tuy nhiên nếu còn muốn truy vấn cho tới một địa điểm ngẫu nhiên thì nên tổ chức duyệt từ trên đầu cho tới thành phần cơ. Bên cạnh đó, vô danh sách liên kết đơn C++ cũng chỉ được chấp nhận người tiêu dùng mò mẫm tìm kiếm tuyến tính độc nhất 1 phân tử.

Cách thiết đặt danh sách liên kết đơn

Tạo node

Một list được tạo nên lên từ rất nhiều node. Do vậy tao tiếp tục chuồn kể từ bước tạo nên node trước. Như vẫn thưa phía trên, một node bao hàm 2 phần là bộ phận links và bộ phận tài liệu. Đối với bộ phận tài liệu, chúng ta có thể tự động tạo nên lên tài liệu theo dõi ý ham muốn (class) hoặc dùng tài liệu có trước (struct). Còn phần links thì đương nhiên được xem là con cái trỏ. Con trỏ này trỏ kể từ node trước cho tới node ngay lập tức kề đàng sau.

Với phần ví dụ tạo nên node này, tao tiếp tục dùng int mang đến phần tài liệu như sau:

struct Node

{

int data;

Node* next;

};

Để tạo nên thêm một node mới mẻ, tao tiếp tục tổ chức khởi tạo nên độ quý hiếm ban sơ và trả địa điểm về mang đến node được cấp phép.

Node* CreateNode(int init_data)

{

Node* node = new Node;

node->data = init_data;

node->next = NULL;      

Node vừa mới được tạo nên ko thêm vô list nên ko links với thành phần này cả. Do cơ nên phần links gán vày NULL.

Code danh sách liên kết đơn C++

Thêm một node vô thân thiết danh sách liên kết đơn
Thêm một node vô thân thiết danh sách liên kết đơn

Khi vẫn có trước những node rồi, tao tiếp tục tổ chức tạo nên lập 1 list vô C++. Do đặc điểm của node là links cùng nhau nên tao chỉ việc bắt được vấn đề của node đầu (head) và nốt cuối (tail) là rất có thể quản lý và vận hành được list.

struct LinkedList

{

Node* head;

Node* tail;

};

Khi hàm tạo nên list vừa mới được tạo hình, bọn chúng vẫn chưa tồn tại thành phần này cả. Vì thế tao tiếp tục gắn phần đầu và cuối tạm thời vô NULL.

void CreateList(LinkedList& l)

{

l.head = NULL;

l.tail = NULL;

}

dang-ky-lap-trinh-teky1

>>> Xem thêm thắt : Lập trình phần mềm địa hình – Xu phía nghề nghiệp và công việc tương lai

Thêm thành phần vô danh sách liên kết đơn

Thêm thành phần đầu

Đầu tiên tao cần thiết xác lập coi danh sách liên kết đơn này còn có trống rỗng hay là không. Nếu list cơ trống rỗng, tao gán luôn luôn head vô node cần thiết thêm thắt. Nếu list ko trống rỗng, tao trỏ links kể từ head vô node mới mẻ. Sau cơ mới mẻ gán lại head vô node này.

void AddHead(LinkedList& l, Node* node)

{

if (l.head == NULL)

{

l.head = node;

l.tail = node;

}

else

{

node->next = l.head;

l.head = node;

}

}

Thêm thành phần đuôi

Thêm một node vô đuôi danh sách
Thêm một node vô đuôi danh sách

Tương tự động như cơ hội thêm thắt thành phần đầu, tao cũng tiếp tục xác lập coi list này còn có trống rỗng hay là không. Nếu trống rỗng thì mang đến node mới mẻ thực hiện tail luôn luôn. Nếu ko trống rỗng thì trỏ tail sẵn sở hữu cho tới node này rồi gán lại tail vô node vừa mới được trỏ.

void AddTail(LinkedList& l, Node* node)

{

if (l.head == NULL)

{

Xem thêm: áo em trắng quá nhìn không ra

l.head = node;

l.tail = node;

}

else

{

l.tail->next = node;

l.tail = node;

}

}

Thêm vô điểm bất kỳ

Gọi p là node cần thiết thêm thắt, còn q là node đằng trước địa điểm cần thiết thêm thắt. Thứ nhất, tao tiếp tục đánh giá coi node q sở hữu gán với NULL hay là không. Nếu sở hữu gán tức là list trống rỗng. Khi cơ chỉ việc gán p lên đầu là được. Nếu ko, người tiêu dùng tiếp tục tiến hành theo dõi quá trình sau: trỏ p->next = q->next, tiếp sau đó q->next = p. Khi triển khai xong, nên đánh giá tiếp q sở hữu nên nốt cuối hay là không. Nếu nên thì nên kế tiếp gán p vài ba tail.

void InsertAfterQ(LinkedList& l, Node* p, Node* q)

{

if (q != NULL)

{

p->next = q->next;

q->next = p;

Xóa thành phần ngoài danh sách liên kết đơn

Xóa ở đầu

Đầu tiên, tao tổ chức đánh giá coi list cơ sở hữu trống rỗng ko. Nếu sở hữu thì thẳng xóa chuồn và nhằm độ quý hiếm vày 0 là được. Còn nếu như list ko trống rỗng thì tiến hành theo dõi những bước sau. Thứ nhất là gán lại head vô địa điểm phía sau thành phần cần thiết xóa, ghi nhớ nên lưu head lại. Sau cơ mới mẻ tổ chức xóa.

int RemoveHead(LinkedList& l, int& x)

{

if (l.head != NULL)

{

Node* node = l.head;

x = node->data;      // Lưu độ quý hiếm của node head lại

l.head = node->next;

delete node;         // Hủy node head đi

if (l.head == NULL)

l.tail = NULL;

return 1;

}

return 0;

}

Xóa ở điểm bất kỳ

Cách xóa một node
Cách xóa một node

Nếu cần thiết xóa node p sau đó 1 node q ngẫu nhiên, tao sẽ có được 3 tình huống cần thiết xét:

  • Nếu q là NULL suy đi ra list trống rỗng, ko cần thiết xóa nhưng mà chỉ việc chỉnh về 0
  • Nếu next của q là NULL, minh chứng p là NULL, suy đi ra p ko tồn bên trên nhằm xóa
  • Nếu p sở hữu tồn bên trên, đánh giá coi p sở hữu nên tail ko, nếu như sở hữu thì chỉ việc gán tail lại vô q là được.

int RemoveAfterQ(LinkedList& l, Node* q, int& x)

{

if (q != NULL)

{

Node* p = q->next;

if (p != NULL)

{

if (l.tail == p)

l.tail = q;

q->next = p->next;

x = p->data;

delete p;

return 1;

}

return 0;

}

return 0;

}

lap-trinh-cho-tre

Duyệt danh sách liên kết đơn và in

Để đánh giá coi list vẫn hoàn hảo hoặc ko, tao tiếp tục gán một node vày head. Sau cơ đánh giá coi node cơ NULL hay là không. Nếu vẫn đạt tức là tao vẫn sở hữu tài liệu của node này. Tiếp tục tiến hành thao tác cơ cho tới node NULL, cơ chủ yếu tail của list.

>>Mời độc giả xem thêm thêm: Lập trình trang web là làm công việc gì? Những việc làm của một lập trình sẵn viên

Vậy vô nội dung bài viết vừa vặn rồi, Teky vẫn giúp đỡ bạn mò mẫm hiểu thêm thắt về những điểm sáng của danh sách liên kết đơn giống như cơ hội tạo nên một list hoàn hảo. Mong rằng những kỹ năng này sẽ hỗ trợ ích mang đến quy trình tiếp thu kiến thức và thao tác của doanh nghiệp.

Học lập trình sẵn, technology bên trên Teky – vấn đề cần thiết biết

TEKY là Học viện tạo ra công nghệ với lịch trình giảng dạy dỗ STEAM (Science – Technology – Engineering – Art – Mathematics) theo dõi chuẩn chỉnh Mỹ trước tiên bên trên nước Việt Nam dành riêng cho trẻ nhỏ kể từ 4 cho tới 18 tuổi tác.

Được xây dựng vô mon 6 năm năm nhâm thìn, TEKY quyết tâm tiến hành thiên chức mang tới mang đến mới trẻ em nước Việt Nam kỹ năng trọn vẹn về STEAM, nhất là những trí tuệ technology, khoa học tập PC và khả năng thế kỷ 21 – 4Cs (Critical Thinking: Tư duy phản biện – Communication: Giao tiếp – Creativity: Sáng tạo nên – Collaboration: Làm việc nhóm).

Xem thêm: trình bày diễn biến, kết quả, ý nghĩa của chiến thắng bạch đằng năm 938

Trải nghiệm học tập lập trình sẵn miễn phí
Trải nghiệm học tập lập trình sẵn miễn phí

Đây là lịch trình không chỉ có chuẩn bị kỹ năng lập trình sẵn mà còn phải tập luyện group khả năng 4Cs. Trẻ tiếp tục được:

  •  Học trí tuệ phản biện trải qua việc phân tách những yếu tố.
  •  Học tính tạo ra trí tuệ Logic trải qua việc lắp ráp và lập trình sẵn robot th ông qua loa những quy mô Lego Mindstorm, ứng dụng trò nghịch ngợm. Giúp con cái học tập chất lượng tốt môn Toán bên trên lớp
  •  Kỹ năng liên minh trải qua những trò nghịch ngợm team-building, những dự án công trình group bên trên lớp.
  •  Phát huy kỹ năng tiếp xúc hiệu suất cao vày nhiều bài bác luyện và sinh hoạt thú vị.

Các cỗ môn giảng dạy dỗ bên trên Teky gồm: Lập trình và trở nên tân tiến ứng dụng, lập trình game, lập trình trang web với python  Lập trình Scratch Robotics Engineering, Công nghệ 3 chiều và MultiMedia. Chúng tôi tin cậy rằng trẻ nhỏ nước Việt Nam sở hữu thời cơ trở nên tân tiến mạnh mẽ và tự tin vô một nền tài chính số và cần phải chuẩn bị sẵn sàng nhằm trở nên những người kinh doanh technology vô sau này.

Liên hệ ngay lập tức học viện chuyên nghành technology tạo ra TEKY sẽ được tư vấn khóa học:

  • Cam kêt 7 tuổi tác rất có thể lập trình
  • Top 10 dự án công trình dạy dỗ sở hữu tầm tác động nhất Khu vực Đông Nam Á 2017 & 2018
  • Top 3 Dự án khéo nhất, NextGen – Thụy Sĩ
  •  Hotline Hà Nội: 024-7109-6668 | 0975-241-015
  •  Hotline Hồ Chí Minh: 028-7109 9948 | 097-900-8642

Website https://mamnontritueviet.edu.vn | Email: [email protected] |