-
-
Notifications
You must be signed in to change notification settings - Fork 30.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* translate readme from linked list * add linked list for viet sub * add vietnamese readme translation for queue * add readme in vietnamese for Stack
- Loading branch information
1 parent
111ea3d
commit 8d1f473
Showing
3 changed files
with
204 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,155 @@ | ||
# Danh sách liên kết (Linked List) | ||
|
||
_Đọc bằng ngôn ngữ khác:_ | ||
[_简体中文_](README.zh-CN.md), | ||
[_Русский_](README.ru-RU.md), | ||
[_日本語_](README.ja-JP.md), | ||
[_Português_](README.pt-BR.md), | ||
[_한국어_](README.ko-KR.md), | ||
[_Español_](README.es-ES.md), | ||
[_Türkçe_](README.tr-TR.md), | ||
[_Українська_](README.uk-UA.md) | ||
|
||
|
||
Trong khoa học máy tính, một danh sách liên kết là một bộ sưu tập tuyến tính | ||
các phần tử dữ liệu, trong đó thứ tự tuyến tính không được xác định bởi | ||
vị trí vật lý của chúng trong bộ nhớ. Thay vào đó, mỗi | ||
phần tử trỏ đến phần tử tiếp theo. Đây là một cấu trúc dữ liệu | ||
bao gồm một nhóm các nút cùng đại diện cho | ||
một chuỗi. Dưới dạng đơn giản nhất, mỗi nút | ||
bao gồm dữ liệu và một tham chiếu (nói cách khác, | ||
một liên kết) đến nút tiếp theo trong chuỗi. Cấu trúc này | ||
cho phép việc chèn hoặc loại bỏ các phần tử một cách hiệu quả | ||
từ bất kỳ vị trí nào trong chuỗi trong quá trình lặp. | ||
Các biến thể phức tạp hơn thêm các liên kết bổ sung, cho phép | ||
việc chèn hoặc loại bỏ một cách hiệu quả từ bất kỳ phần tử nào | ||
trong chuỗi dựa trên tham chiếu. Một nhược điểm của danh sách liên kết | ||
là thời gian truy cập tuyến tính (và khó điều chỉnh). Truy cập nhanh hơn, | ||
như truy cập ngẫu nhiên, là không khả thi. Mảng | ||
có độ tương phản cache tốt hơn so với danh sách liên kết. | ||
|
||
![Linked List](./images/linked-list.jpeg) | ||
*Được làm từ [okso.app](https://okso.app)* | ||
|
||
## Mã giải (Pseudocode) cho Các Hoạt Động Cơ Bản | ||
*head = đầu, | ||
*tail = đuôi, | ||
*next = kế tiếp, | ||
*node = nút, | ||
*value = giá trị | ||
|
||
### Chèn (Insert) | ||
|
||
``` | ||
ThêmGiáTrị(giá trị) (Add(value)) | ||
Trước(Pre): giá trị là giá trị muốn thêm vào danh sách | ||
Sau(Post): giá trị đã được đặt ở cuối danh sách | ||
n ← node(value) | ||
if head = ø | ||
head ← n | ||
tail ← n | ||
else | ||
tail.next ← n | ||
tail ← n | ||
end if | ||
end ThêmGiáTrị(Add) | ||
``` | ||
|
||
``` | ||
ChènVàoĐầu(giá trị) | ||
Trước(Pre): giá trị là giá trị muốn thêm vào danh sách | ||
Sau(Post): giá trị đã được đặt ở đầu danh sách | ||
n ← node(value) | ||
n.next ← head | ||
head ← n | ||
if tail = ø | ||
tail ← n | ||
end | ||
end ChènVàoĐầu | ||
``` | ||
|
||
### Tìm Kiếm (Search) | ||
``` | ||
Chứa(đầu, giá trị) | ||
Trước: đầu là nút đầu trong danh sách | ||
giá trị là giá trị cần tìm kiếm | ||
Sau: mục đó có thể ở trong danh sách liên kết, true; nếu không, là false | ||
n ← head | ||
while n != ø and n.value != value | ||
n ← n.next | ||
end while | ||
if n = ø | ||
return false | ||
end if | ||
return true | ||
end Contains | ||
``` | ||
|
||
### Xóa (Delete) | ||
``` | ||
Xóa(đầu, giá trị) | ||
Trước: đầu là nút đầu trong danh sách | ||
giá trị là giá trị cần xóa khỏi danh sách | ||
Sau: giá trị đã được xóa khỏi danh sách, true; nếu không, là false | ||
if head = ø | ||
return false | ||
end if | ||
n ← head | ||
if n.value = value | ||
if head = tail | ||
head ← ø | ||
tail ← ø | ||
else | ||
head ← head.next | ||
end if | ||
return true | ||
end if | ||
while n.next != ø and n.next.value != value | ||
n ← n.next | ||
end while | ||
if n.next != ø | ||
if n.next = tail | ||
tail ← n | ||
tail.next = null | ||
else | ||
n.next ← n.next.next | ||
end if | ||
return true | ||
end if | ||
return false | ||
end Remove | ||
``` | ||
|
||
### Duyệt(raverse) | ||
Duyệt(đầu) | ||
Trước: đầu là nút đầu trong danh sách | ||
Sau: các mục trong danh sách đã được duyệt | ||
n ← head | ||
while n != ø | ||
yield n.value | ||
n ← n.next | ||
end while | ||
end Traverse | ||
|
||
### Duyệt Ngược (Traverse in Reverse) | ||
DuyệtNgược(đầu, đuôi) | ||
Trước: đầu và đuôi thuộc cùng một danh sách | ||
Sau: các mục trong danh sách đã được duyệt theo thứ tự ngược lại | ||
|
||
## Độ Phức Tạp | ||
|
||
### Độ Phức Tạp Thời Gian (Time Complexity) | ||
|
||
| Access | Search | Insertion | Deletion | | ||
| :-------: | :-------: | :-------: | :-------: | | ||
| O(n) | O(n) | O(1) | O(n) | | ||
|
||
## Độ Phức Tạp Không Gian (Space Complexity) | ||
O(n) | ||
|
||
## Tham Khảo | ||
|
||
- [Wikipedia](https://en.wikipedia.org/wiki/Linked_list) | ||
- [YouTube](https://www.youtube.com/watch?v=njTh_OwMljA&index=2&t=1s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
# Hàng đợi (Queue) | ||
|
||
_Đọc bằng ngôn ngữ khác:_ | ||
[_简体中文_](README.zh-CN.md), | ||
[_Русский_](README.ru-RU.md), | ||
[_日本語_](README.ja-JP.md), | ||
[_Português_](README.pt-BR.md), | ||
[_한국어_](README.ko-KR.md), | ||
[_Українська_](README.uk-UA.md) | ||
|
||
Trong khoa học máy tính, một **hàng đợi** là một loại cụ thể của kiểu dữ liệu trừu tượng hoặc bộ sưu tập trong đó các phần tử trong bộ sưu tập được giữ theo thứ tự và nguyên tắc (hoặc chỉ) các hoạt động trên bộ sưu tập là thêm các phần tử vào vị trí cuối cùng, được gọi là đưa vào hàng đợi (enqueue), và loại bỏ các phần tử từ vị trí đầu tiên, được gọi là đưa ra khỏi hàng đợi (dequeue). Điều này khiến cho hàng đợi trở thành một cấu trúc dữ liệu First-In-First-Out (FIFO). Trong cấu trúc dữ liệu FIFO, phần tử đầu tiên được thêm vào hàng đợi sẽ là phần tử đầu tiên được loại bỏ. Điều này tương đương với yêu cầu rằng sau khi một phần tử mới được thêm vào, tất cả các phần tử đã được thêm vào trước đó phải được loại bỏ trước khi có thể loại bỏ phần tử mới. Thường thì cũng có thêm một hoạt động nhìn hay lấy phần đầu, trả về giá trị của phần tử đầu tiên mà không loại bỏ nó. Hàng đợi là một ví dụ về cấu trúc dữ liệu tuyến tính, hoặc trừu tượng hơn là một bộ sưu tập tuần tự. | ||
|
||
Hàng đợi FIFO (First-In-First-Out) có thể được biểu diễn như sau: | ||
|
||
![Queue](./images/queue.jpeg) | ||
|
||
*Made with [okso.app](https://okso.app)* | ||
|
||
## Tham Khảo | ||
|
||
- [Wikipedia](https://en.wikipedia.org/wiki/Queue_(abstract_data_type)) | ||
- [YouTube](https://www.youtube.com/watch?v=wjI1WNcIntg&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=3&) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
# Ngăn xếp (stack) | ||
|
||
_Đọc bằng ngôn ngữ khác:_ | ||
[_简体中文_](README.zh-CN.md), | ||
[_Русский_](README.ru-RU.md), | ||
[_日本語_](README.ja-JP.md), | ||
[_Português_](README.pt-BR.md), | ||
[_한국어_](README.ko-KR.md), | ||
[_Español_](README.es-ES.md), | ||
[_Українська_](README.uk-UA.md) | ||
|
||
Trong khoa học máy tính, một ngăn xếp (stack) là một kiểu dữ liệu trừu tượng phục vụ như một bộ sưu tập các phần tử, với hai hoạt động chính: | ||
|
||
đẩy (push), thêm một phần tử vào bộ sưu tập, và | ||
lấy (pop), loại bỏ phần tử được thêm gần nhất mà chưa được loại bỏ. | ||
Thứ tự mà các phần tử được lấy ra khỏi ngăn xếp dẫn đến tên gọi thay thế của nó, là LIFO (last in, first out). Ngoài ra, một hoạt động nhìn có thể cung cấp quyền truy cập vào phần trên mà không làm thay đổi ngăn xếp. Tên "ngăn xếp" cho loại cấu trúc này đến từ sự tương tự với một bộ sưu tập các vật phẩm vật lý được xếp chồng lên nhau, điều này làm cho việc lấy một vật phẩm ra khỏi đỉnh của ngăn xếp dễ dàng, trong khi để đến được một vật phẩm sâu hơn trong ngăn xếp có thể đòi hỏi việc lấy ra nhiều vật phẩm khác trước đó. | ||
|
||
Biểu diễn đơn giản về thời gian chạy của một ngăn xếp với các hoạt động đẩy và lấy. | ||
|
||
![Stack](./images/stack.jpeg) | ||
|
||
*Made with [okso.app](https://okso.app)* | ||
|
||
## Tham Khảo | ||
|
||
- [Wikipedia](https://en.wikipedia.org/wiki/Linked_list) | ||
- [YouTube](https://www.youtube.com/watch?v=njTh_OwMljA&index=2&t=1s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) |