rust_algorithms/linked_list/mod.rs
1//! # Linked List (bog'langan ro'yxat)
2//!
3//! Darslik: `06-linked-list/`
4//!
5//! Bog'langan ro'yxat — elementlar (tugunlar) xotirada yonma-yon turmaydigan,
6//! har biri keyingisining manzilini saqlaydigan chiziqli struktura.
7//!
8//! ```text
9//! HEAD → [10 | •] → [20 | •] → [30 | ✕]
10//! ```
11//!
12//! ## `Vec` bilan solishtirish
13//!
14//! | Amal | `Vec<T>` | Linked List |
15//! |---|---|---|
16//! | Boshiga qo'shish | O(n) | **O(1)** |
17//! | Oxiriga qo'shish | O(1)\* | O(n) (yoki tail bilan O(1)) |
18//! | `i` -elementga murojaat | **O(1)** | O(n) |
19//! | Ma'lum tugunni o'chirish | O(n) | **O(1)** |
20//! | Kesh (cache) samaradorligi | **Yuqori** | Past |
21//!
22//! ## Rustda linked list — nega qiyin?
23//!
24//! Rustda har bir qiymatning **bitta egasi** bo'ladi. Linked listda esa tugunlar
25//! bir-birini "ushlab" turadi. Shuning uchun:
26//!
27//! - **Bir tomonlama** ro'yxat: `Option<Box<Node<T>>>` — egalik zanjiri, muammosiz.
28//! - **Ikki tomonlama** ro'yxat: `Rc<RefCell<Node<T>>>` (oldinga) + `Weak` (orqaga) —
29//! `Weak` bo'lmasa **sikl** hosil bo'lib, xotira hech qachon bo'shamaydi.
30//!
31//! > **Amaliy maslahat:** Rustda 95% hollarda `Vec` yoki `VecDeque` linked listdan
32//! > tezroq. Linked listni faqat "o'rtadan tez o'chirish" haqiqatan kerak bo'lganda
33//! > ishlating. Bu modul — tushunish uchun.
34
35mod doubly;
36mod singly;
37
38pub use doubly::DoublyLinkedList;
39pub use singly::SinglyLinkedList;