C# Cơ bản .NET Core §1 Cài đặt, chương trình C# đầu tiên §2 Biến, kiểu dữ liệu và nhập/xuất §3 Toán tử số học và gán §4 So sánh, logic và lệnh if, switch §5 Vòng lặp for, while §6 Phương thức - Method §7 Chuyển số thành chữ §8 Phương thức - Delegate §9 Lớp - Class §10 Namespace §11 Partial, Nested §12 Kiểu giá trị, tham chiếu §13 Kiểu vô danh và dynamic §14 Biểu thức lambda §15 Event §16 Hàm hủy - Quá tải toán tử - thành viên tĩnh - indexer §17 null và nullable §18 Mảng §19 Chuỗi ký tự §20 Tính kế thừa §21 Phương thức khởi tạo §22 Tính đa hình - abstract - interface §23 Struct và Enum §24 Ngoại lệ Exeption §25 IDisposable - using §26 File cơ bản §27 FileStream §28 Generic §29 Collection - List §30 SortedList §31 Queue / Stack §32 Linkedlist §33 Dictionary - HashSet §34 Phương thức mở rộng §35 ObservableCollection §36 LINQ §37 (Multithreading) async - bất đồng bộ §38 Type §39 Attribute Annotation §40 DI Dependency Injection §41 (Multithreading) Parallel §42 Thư viện lớp §43 (Networking) Uri, Dns, Ping §44 (Networking) HttpClient §45 (Networking) HttpMessageHandler §46 (Networking) HttpListener §47 (Networking) Tcp TcpListenerr/TcpClient §48 (ADO.NET) SqlConnection §49 (ADO.NET) SqlCommand §50 (ADO.NET) DataAdapter §51 (EF Core) Tổng quan §52 (EF Core) Tạo Model §53 (EF Core) Fluent API §54 (EF Core) Query §55 (EF Core) Scaffold §56 (EF Core) Migration §57 (ASP.NET CORE) Hello World! §58 (ASP.NET CORE) Middleware §59 (ASP.NET CORE) Map - Request - Response §60 (ASP.NET CORE) IServiceCollection - MapWhen §61 (ASP.NET CORE) Session - ISession §62 (ASP.NET CORE) Configuration §63 (ASP.NET CORE) Gửi Mail §64 (ASP.NET CORE) SASS/SCSS §65 (ASP.NET CORE) LibMan §66 (ASP.NET RAZOR) Khởi tạo và Route §67 (ASP.NET RAZOR) Cú pháp Razor §68 (ASP.NET RAZOR) Layout trong ASP.NET Core §69 (ASP.NET RAZOR) Partial §70 (ASP.NET RAZOR) ViewComponent §71 (ASP.NET RAZOR) TagHelper §72 (ASP.NET RAZOR) HtmlHelper §73 (ASP.NET RAZOR) PageModel §74 (ASP.NET RAZOR) Model Binding §75 (ASP.NET RAZOR) HTML Form, Validation §76 (ASP.NET RAZOR) Upload File §77 (ASP.NET RAZOR) Entity Framework §78 (ASP.NET RAZOR) Paging §79 (ASP.NET RAZOR) Identity (1) - Register, Login, Logout §80 (ASP.NET RAZOR) Identity (2) Lockout, Reset Password §81 (ASP.NET RAZOR) Identity (3) Google Login §82 (ASP.NET RAZOR) Identity (4) Facebook Login §83 (ASP.NET RAZOR) Identity (5) profile, password, email ... §84 (ASP.NET RAZOR) Identity (6) Role §85 (ASP.NET RAZOR) Identity (7) Role-based Authorization §86 (ASP.NET RAZOR) Identity (8) RoleClaim §87 (ASP.NET RAZOR) Identity (9) Authorization Handler §88 (ASP.NET RAZOR) IAuthorizationService §89 (ASP.NET MVC) Controller - View §90 (ASP.NET MVC) Route §91 (ASP.NET MVC) EF, Identity §92 (ASP.NET MVC) Binding, Validation §93 (ASP.NET MVC) Xây dựng Website(1) §94 (ASP.NET MVC) Xây dựng Website(2) §95 (ASP.NET MVC) Xây dựng Website(3) §96 (ASP.NET MVC) Xây dựng Website(4) §97 (ASP.NET MVC) Giỏ hàng - Cart (5) §98 (ASP.NET MVC) elFinder (5) §99 (ASP.NET MVC) SB Admin (6) §100 (ASP.NET MVC) Kestrel, publish
Queue / Stack (Bài trước)

Cần sử dụng 2 namspace sau:

using System.Collections;
using System.Collections.Generic;

LinkedList trong C#

Trong thư viện .NET cung cấp lớp LinkedList<T> là loại danh sách liên kết kép (từ đây gọi tắt là danh sách liên kết).

Danh sách liên kết là một danh sách chứa các phần tử, mỗi phần tử trong loại danh sách này được gọi là một nút (Node). Mỗi nút ngoài dữ liệu của nút đó, nó sẽ gồm hai biến - một biến tham chiếu đến Node phía trước, một nút tham chiếu đến nút phía sau.

Điều này có nghĩa, có có một nút - có thể lấy được nút phía trước nó - cứ thế cho đến nút đầu tiên, nút đầu, tương tự lấy được nút phía sau và dịch chuyển dần được về cuối.

Khai báo - khởi tạo một LinkedList, ví dụ tạo danh sách liên kết mà dữ liệu các nút có kiểu string

LinkedList<string> cacbaihoc = new  LinkedList<string>();

Danh sách khởi tạo trên có dữ liệu trong các nút là kiểu string, tuy nhiên bản thân các nút được biểu diễn bởi lớp LinkedListNode

LinkedListNode trong C#

LinkedListNode<T> là lớp biểu diễn NÚT trong LinkedList, các đối tượng của LinkedListNode được tạo ra từ LinkedList. Nó có các thuộc tính sau:

Thuộc tính Ý nghĩa
List Thuộc tính - tham chiếu (trỏ) đến LinkedList
Value Thuộc tính - là dữ liệu của Node
Next Thuộc tính - tham chiếu (trỏ) đến NÚT tiếp theo (phía sau) - null thì nó là nút cuối
Previous Thuộc tính - tham chiếu (trỏ) đến NÚT phía trước - null thì nó là nút đầu tiên

Một số phương thức trong LinkedList

Member Ý nghĩa
Count Số nút trong danh sách
First Nút đầu tiên của danh sách
Last Nút đầu tiên của danh sách
AddFirst(T) Chèn một nút có dữ liệu T vào đầu danh sách
AddLast(T) Chèn một nút có dữ liệu T vào cuối danh sách
AddAfter(Node, T) Chèn nút với dữ liệu T, vào sau nút Node (kiểu LinkedListNode)
AddBefore(Node, T) Chèn nút với dữ liệu T, vào trước nút Node (kiểu LinkedListNode)
Clear() Xóa toàn bộ danh sách
Contains(T) Kiểm tra xem có nút với giá trị dữ liệu bằng T
Remove(T) Xóa nút có dữ liệu bằng T
RemoveFirst() Xóa nút đầu tiên
RemoveLast() Xóa nút cuối cùng
Find(T) Tìm một nút

Thử tạo ra danh sách liên kết chứa tên các bài học

LinkedList<string> cacbaihoc = new  LinkedList<string>();


cacbaihoc.AddFirst("Bài học 3");   // thêm vào đầu danh sach
cacbaihoc.AddLast("Bài học 4");    // thêm vào cuối
cacbaihoc.AddFirst("Bài học 2");
cacbaihoc.AddFirst("Bài học 1");


// Lấy phần tử đầu tiên, sau đó duyệt đến cuối
Console.WriteLine("---------Nút từ đầu về cuối");
LinkedListNode<string> node = cacbaihoc.First;
while (node != null) {
    Console.WriteLine(node.Value);
    node = node.Next;   // node gán bằng nút sau nó
}


// Lấy phần tử cuối cùng, sau đó duyệt về phần tử đầu  tiên
Console.WriteLine("--------Nút từ cuối đến đầu");
node = cacbaihoc.Last;
while (node != null) {
    Console.WriteLine(node.Value);
    node = node.Previous;   // node gán bằng nút phía trước nó
}

/*  Kết quả
---------Nút từ đầu về cuối
Bài học 1
Bài học 2
Bài học 3
Bài học 4
--------Nút từ cuối đến đầu
Bài học 4
Bài học 3
Bài học 2
Bài học 1 */

Tham khảo mã nguồn: CS024_SomeCollections hoặc tải về ex024

Queue / Stack (Bài trước)