Viết một lớp Stack và Queue sử dụng Generic Type.
Trong bài viết này mình sẽ tìm hiểu về kiểu gen (generic types) cho phép mình tạo ra các cấu trúc dữ liệu linh hoạt có thể làm việc với nhiều loại dữ liệu khác nhau. Mình sẽ tạo lớp Stack và Queue sử dụng kiểu gen, cho phép chúng hoạt động với bất kỳ kiểu dữ liệu nào.
Lưu ý: Kiểu gen cung cấp tính linh hoạt cao trong việc xây dựng các cấu trúc dữ liệu và mình sẽ tận dụng tính năng này để tạo Stack và Queue linh hoạt.
Stack/Queue Generic Class
Xây dựng lớp stack sử dụng kiểu Gen
Bắt đầu với lớp Stack, mình sẽ sử dụng kiểu gen để tạo một cấu trúc dữ liệu ngăn xếp có thể hoạt động với bất kỳ kiểu dữ liệu nào.
class Stack<T> { private items: T[] = []; push(item: T): void { this.items.push(item); } pop(): T | undefined { return this.items.pop(); } }
Xây dựng lớp queue sử dụng kiểu Gen
Tiếp theo, mình sẽ tạo lớp Queue cũng sử dụng kiểu gen để tạo một cấu trúc dữ liệu hàng đợi có khả năng làm việc với nhiều loại dữ liệu khác nhau.
class Queue<T> { private items: T[] = []; enqueue(item: T): void { this.items.push(item); } dequeue(): T | undefined { return this.items.shift(); } }
Sử dụng lớp Stack và Queue với các kiểu dữ liệu khác nhau
Mình có thể sử dụng Stack và Queue với bất kỳ kiểu dữ liệu nào bằng cách chỉ định kiểu dữ liệu khi tạo thực thể của chúng.
const numberStack = new Stack<number>(); numberStack.push(10); numberStack.push(20); console.log(numberStack.pop()); // Kết quả: 20 const stringQueue = new Queue<string>(); stringQueue.enqueue("Hello"); stringQueue.enqueue("World"); console.log(stringQueue.dequeue()); // Kết quả: Hello
Trong mã lệnh trên, mình đã xây dựng Stack và Queue sử dụng kiểu gen. Điều này cho phép mình sử dụng các cấu trúc dữ liệu này với bất kỳ kiểu dữ liệu nào, từ số đến chuỗi.
Kết quả khi chạy mã lệnh sẽ hiển thị giá trị được thêm vào và loại bỏ từ Stack và Queue với kiểu dữ liệu tương ứng.
Bài giải
-------------------- ######## --------------------
Câu hỏi thường gặp liên quan:
- Viết một lớp Stack và Queue sử dụng Generic Type.
- Tạo một hàm generic nhận vào một mảng và trả về phần tử cuối cùng của mảng trong TypeScript.
- Viết một lớp Dictionary/Map sử dụng Generic Type để lưu trữ cặp key-value trong TypeScript.
- Tạo một hàm generic nhận vào một mảng và một hàm predicate trong TypeScript.
- Hàm Generic với Keyof trong Typescript
- Tạo một hàm generic nhận vào hai đối tượng và trả về một đối tượng mới trong TypeScript.