Triển khai danh sách liên kết đơn trong C

Thiết kế cấu trúc nút typedef struct Node { void* payload; struct Node* next; } Node; payload: Con trỏ kiểu void* lưu dữ liệu, cho phép linh hoạt với nhiều kiểu dữ liệu. next: Con trỏ đến nút tiếp theo trong danh sách. Thiết kế cấu trúc danh sách typedef struct LinkedList { Node head; int length; } LinkedList; head: Nú ...

Đăng vào ngày 3 tháng 6 lúc 17:18

Ghi chú giải bài tập lập trình (Bản 14)

Liên kết cuộc thi \(\text{By DaiRuiChen007}\) A. [P11648] 2236 A.D. (4.5) Liên kết bài toán Ta thực hiện phân tách từng bit của \(k\), duy trì tập hợp \(S\) động. Mỗi thao tác cập nhật hoặc truy vấn \(w_x=\sum_{y\in S}a_{x\lor y}\). Sử dụng DSU để quản lý, mỗi nút chỉ có \(k\) tổ tiên thay đổi trọng số đường đi. Với \(\log n\) cạnh nhẹ, số lần ...

Đăng vào ngày 1 tháng 6 lúc 14:48

Tìm hiểu cấu trúc dữ liệu Heap và ứng dụng trong Python

Heap (đống) là một cấu trúc dữ liệu cây đặc biệt, đóng vai trò quan trọng trong việc quản lý tập hợp các phần tử có thứ tự. Một Heap hợp lệ phải tuân thủ hai quy tắc cốt lõi: Tính chất cây nhị phân hoàn chỉnh: Cấu trúc cây phải được lấp đầy ở tất cả các tầng ngoại trừ tầng cuối cùng, nơi các nút phải được sắp xếp từ trái sang phải. ...

Đăng vào ngày 25 tháng 5 lúc 20:09

Cấu Trúc Dữ Liệu Ngăn Xếp: Cơ Chế Và Các Trường Hợp Sử Dụng

Khái niệm cơ bản về Ngăn xếp (Stack) Ngăn xếp (Stack) là một dạng cấu trúc dữ liệu tuyến tính, nơi mà các thao tác thêm mới hoặc xóa bỏ phần tử chỉ được phép thực hiện tại một đầu duy nhất. Đầu này được gọi là đỉnh ngăn xếp (Top), trong khi đầu đối diện được xem là đáy (Bottom). Thao tác đưa phần tử vào ngăn xếp được gọi là đẩy (Push), còn thao ...

Đăng vào ngày 25 tháng 5 lúc 12:20

Quản lý Dữ liệu Phức hợp bằng Mảng Cấu trúc trong C

Khái niệm Mảng Cấu trúc Mảng cấu trúc là một dạng dữ liệu cho phép lưu trữ nhiều biến cấu trúc cùng kiểu liên tiếp trong bộ nhớ. Thay vì khai báo từng biến riêng lẻ, lập trình viên có thể quản lý một tập hợp các đối tượng đồng nhất thông qua một tên biến duy nhất. Phương pháp Khai báo Có hai cách phổ biến để định nghĩa một mảng cấu trúc trong ...

Đăng vào ngày 24 tháng 5 lúc 12:58

Hiểu Rõ Sự Khác Biệt Giữa Shallow Copy và Deep Copy trong Python

Trong Python, khi làm việc với các cấu trúc dữ liệu phức tạp, việc sao chép (copy) có thể dẫn đến những kết quả không như mong đợi nếu không hiểu rõ về hai khái niệm: Shallow Copy (sao chép nông) và Deep Copy (sao chép sâu). Hiểu rõ sự khác biệt giữa chúng là cực kỳ quan trọng để tránh các lỗi tiềm ẩn và quản lý bộ nhớ hiệu quả. Shallow Copy (S ...

Đăng vào ngày 23 tháng 5 lúc 21:09

Cấu trúc dữ liệu ngăn xếp và hàng đợi trong C

Ngăn xếp và hàng đợi là hai cấu trúc tuyến tính đặc biệt, khác với danh sách thông thường cho phép chèn/xóa tại bất kỳ vị trí nào, cả hai chỉ cho phép thao tác tại các đầu cố định. Ngăn xếp (Stack) tuân theo nguyên tắc FIFO ngược — LIFO (Last In, First Out): phần tử được thêm vào cuối cùng sẽ được lấy ra đầu tiên. Trong một ngăn xếp: Đỉnh ...

Đăng vào ngày 22 tháng 5 lúc 09:38

Kỳ thi Lập trình Viên Mới ABC394: Phân tích Bài Giải

Bài A: Lọc Ký Tự 2 Yêu cầu: Cho chuỗi ký tự đầu vào, in ra chuỗi chỉ chứa các ký tự số 2 Giải pháp: Xem mã nguồn #include <iostream> #include <string> using namespace std; int main() { string str; cin >> str; string result; for(char c : str) { if(c == '2') result += c; } cout << result; ...

Đăng vào ngày 20 tháng 5 lúc 10:03

Giới thiệu về cây Chủ tịch (Chairman Tree)

Tôi ghét các cấu trúc dữ liệu khó hiểu! Huhu. Giới thiệu vấn đề Cho một dãy số nguyên dương có độ dài \(n\), thực hiện \(q\) truy vấn, mỗi truy vấn yêu cầu tìm giá trị của phần tử nhỏ thứ \(k\) trong đoạn \([l,r]\) của dãy. Nếu \(n,q \le 10^3\), đây chỉ là bài toán đơn giản cần duyệt toàn bộ; nhưng khi \(n,q \le 10^5\), phương pháp duyệt sẽ khô ...

Đăng vào ngày 19 tháng 5 lúc 16:26

Giải quyết các bài toán thuật toán phổ biến bằng kỹ thuật Hai con trỏ

Kỹ thuật hai con trỏ (Two-Pointer) là một trong những phương pháp tối ưu nhất để xử lý các bài toán trên mảng hoặc chuỗi. Thay vì sử dụng các vòng lặp lồng nhau gây tốn kém về thời gian (O(n²)), hai con trỏ giúp đưa độ phức tạp về O(n). Dưới đây là cách áp dụng kỹ thuật này vào các bài toán thực tế. 1. Loại bỏ phần tử (LeetCode 27) Bài toán yê ...

Đăng vào ngày 17 tháng 5 lúc 21:51