lOMoARcPSD|59149108
BUI 4: STACK VÀ QUEUE
Mục tiêu:
- Cài ặt Stack và Queue bng mng
- S dng lp Stack và Queue t thư viện Yêu cầu:
- Sinh viên thc hin vic li các ni dung phn A và kim tra tính úng n on chương
trình
- Thc hin bài tp 1 ến 4 phn B
- Np file nén lên elearning
A. Cài ặt NganXep và HangDoi
1. Xây dựng lớp NganXep
- Ti ca s Solution Explorer: nhp chut phi vào tên project, chn Add > Class…
Đặt tên lp là NganXep.cs
- Lp NganXep: biu din cho một ngăn xếp với kích thước c ịnh ược xác ịnh bi
biến tĩnh, không thể thay ổi MAXSIZE.
- D liu ca các phn t trong ngăn xếp ược lưu trong một mảng có kích thước
MAXSIZE.
- V trí ỉnh của ngăn xếp ược xác ịnh bi thuc tính top và s ng các phn t trong
ngăn xếp ược lưu trong count.
lOMoARcPSD|59149108
- Khi NganXep ược to ra thì top tr ến v trí -1 và s lượng phn t trong NganXep
bng 0.
- Các hoạt ộng cơ bản thc hin trên NganXep:
+ IsEmpty: kiểm tra ngăn xếp rng hay không
+ IsFull: Kiểm tra ngăn xếp ầy hay không
+ Push(data): thêm mt phn t có giá tr data vào ỉnh ngăn xếp
+ Pop(): ly ra và tr v phn t ỉnh ngăn xếp
+ Peek(): tr v giá tr phn t ỉnh ngăn xếp nhưng không loi nó ra khỏi ngăn xếp
+ ToString(): phương thức ghi è, xác ịnh cách biu din dng chui ca NganXep; có
th ược gi khi chn WriteLine hay gi ToString
- Các thuộc tính ược ịnh nghĩa trong lớp NganXep
- Các phương thức lần lượt ược ịnh nghĩa như sau
lOMoARcPSD|59149108
lOMoARcPSD|59149108
Kim tra lp va to NganXep, trong hàm Main thc hin
Thc hin thêm các hoạt ộng cơ bản trên NganXep
2. Xây dựng lớp HangDoi
To lp HangDoi biu din cho mt queue với kích thước c ịnh ược xác ịnh bi
MAXSIZE.
- D liu ca các phn t trong ngăn xếp ược lưu trong một mảng có kích thước
MAXSIZE.
- D liu ca các phn t ược lưu trong một mảng có kích thước MAXSIZE.
- V trí ầu và cuối hành ợi ược xác ịnh bi thuc tính frontrear, s lượng các phn
t ược lưu trong count.
lOMoARcPSD|59149108
- Khi một ối tượng HangDoi ưc khi to thì s lượng phn t = 0, front tr ến ô index
= 0 và rear = -1.
- Các hoạt ộng cơ bản thc hin trên HangDoi
+ IsEmpty: kiểm tra hàng ợi rng hay không
+ IsFull: Kiểm tra hàng ợi ầy hay không
+ Enqueue(data): thêm mt phn t giá tr data vào uôi hàng ợi
+ Dequeue(): ly ra và tr v phn t ầu hàng ợi
+ Peek(): tr v giá tr phn t ầu hàng ợi nhưng không loại nó ra khỏi hàng ợi
+ ToString(): phương thức ghi è, xác ịnh cách biu din dng chui ca HangDoi; có
th ược gi khi chn WriteLine hay gi ToString
- Các thuộc tính ược ịnh nghĩa trong lớp HangDoi
- Các phương thức ược trin khai c th
lOMoARcPSD|59149108
lOMoARcPSD|59149108
B. Sử dụng thư viện
1. Lp Stack thuc namespace System.Collections.Generic
- Khi tạo ối tượng ca Stack
Stack<kiu d liu> tŒn_biến = new Stack<kiu d liu>();
- Các thuộc tính và phương thức cơ bản ca Stack
Count
S lượng phn t
Clear()
Xóa tt c phn t
Contain (val)
Xác ịnh val có trong ngăn xếp không. Tr v
True/False
Peek()
Tr v ối tượng ầu ngăn xếp nhưng không
loi b
Pop()
Tr v ối tượng ầu ngăn xếp loi ra khỏi
ngăn xếp
Push(val)
Thêm phn t vào ngăn xếp
ToArray()
Chuyển ngăn xếp thành mng
Xem thêm hướng dn ti:
https://learn.microsoft.com/en-
us/dotnet/api/system.collections.generic.stack1?view=net-8.0
2. Lp Queue thuc namespace System.Collections.Generic
- Khi to ối tượng ca Queue
Queue<kiu d liu> tŒn_biến = new Queue<kiu d liu>();
lOMoARcPSD|59149108
- Các thuộc tính và phương thức cơ bản ca Queue
Count
S lượng phn t
Clear()
Xóa tt c phn t
Contain (val)
Xác ịnh val trong hàng i không. Tr v
True/False
Dequeue()
Tr v ối tượng ầu hàng ợi và loi b
khỏi hàng ợi
Enqueue(val)
Thêm phn t vào hàng ợi
Peek()
Tr v ối tượng ầu hàng ợi nhưng không
loi b nó khỏi hàng ợi
ToArray()
Chuyển hàng ợi thành mng
Bài tập:
1. S dng cấu trúc Stack ể o mt chui nhp t bàn phím
Ví d: nhập vào “Hello world”
In ra màn hình “world Hello”
2. S dng Stack kim tra biu thc s dng du ngoặc úng hay không. Biu thc ch
s dng ngoc ơn.
3. S dng cu trúc Stack ể chuyn giá tr t cơ s 10 sang cơ số 2 (thp phân sang nh
phân) và ngược li.
Xây dng ng dng Winform cho phép ngưi dùng nhp mt s nguyên dương vào và
thc hin chuyển ổi sang s nh phân.
Ví d hot ng ca chương trình
lOMoARcPSD|59149108
4. Viết chương trình mô phỏng quy trình xếp hàng ặt vé xem phim như sau:
Hàng ợi A cha các khách ch ly vé (ch có tên).
Hàng i B cha các ghế còn trng ca rp (ch có s ghế).
Danh sách C chứa danh sách khách ã mua vé (Khách thuc lp Customer có tên và
ghế).
Lp Customer ược nh nghĩa:
lOMoARcPSD|59149108
Khi chương trình bt u, menu gm các tùy chn ược hin th
1- Nhp ghế trng
2- Nhp khách hàng (tên) vào hàng i
3- Phát vé cho khách hàng
- Nếu còn khách hàng i và còn ghế thì thêm khách hàng vi s ghế vào C
- Nếu không iều kin thì thông báo cho người dùng
4- Thoát
5- Tr vé (phn m rng, không bt buc)
- Nhp vào tên khách hàng mun tr
- Tìm kiếm trong C tên phù hp
+ Nếu tìm thy, thêm ghế ng vi khách hàng tr vé vào B, xóa khách hàng khi C
+ Nếu không tìm thy, hin th thông báo

Preview text:

lOMoARcPSD| 59149108
BUỔI 4: STACK VÀ QUEUE Mục tiêu:
- Cài ặt Stack và Queue bằng mảng
- Sử dụng lớp Stack và Queue từ thư viện Yêu cầu:
- Sinh viên thực hiện việc lại các nội dung phần A và kiểm tra tính úng ắn oạn chương trình
- Thực hiện bài tập 1 ến 4 phần B
- Nộp file nén lên elearning
A. Cài ặt NganXep và HangDoi
1. Xây dựng lớp NganXep
- Tại cửa sổ Solution Explorer: nhấp chuột phải vào tên project, chọn Add > Class…
Đặt tên lớp là NganXep.cs
- Lớp NganXep: biểu diễn cho một ngăn xếp với kích thước cố ịnh ược xác ịnh bởi
biến tĩnh, không thể thay ổi MAXSIZE.
- Dữ liệu của các phần tử trong ngăn xếp ược lưu trong một mảng có kích thước MAXSIZE.
- Vị trí ỉnh của ngăn xếp ược xác ịnh bởi thuộc tính top và số lượng các phần tử trong
ngăn xếp ược lưu trong count. lOMoARcPSD| 59149108
- Khi NganXep ược tạo ra thì top trỏ ến vị trí -1 và số lượng phần tử trong NganXep bằng 0.
- Các hoạt ộng cơ bản thực hiện trên NganXep:
+ IsEmpty: kiểm tra ngăn xếp rỗng hay không
+ IsFull: Kiểm tra ngăn xếp ầy hay không
+ Push(data): thêm một phần tử có giá trị data vào ỉnh ngăn xếp
+ Pop(): lấy ra và trả về phần tử ở ỉnh ngăn xếp
+ Peek(): trả về giá trị phần tử ở ỉnh ngăn xếp nhưng không loại nó ra khỏi ngăn xếp
+ ToString(): phương thức ghi è, xác ịnh cách biểu diễn dạng chuỗi của NganXep; có
thể ược gọi khi chọn WriteLine hay gọi ToString
- Các thuộc tính ược ịnh nghĩa trong lớp NganXep
- Các phương thức lần lượt ược ịnh nghĩa như sau lOMoARcPSD| 59149108 lOMoARcPSD| 59149108
Kiểm tra lớp vừa tạo NganXep, trong hàm Main thực hiện
Thực hiện thêm các hoạt ộng cơ bản trên NganXep
2. Xây dựng lớp HangDoi
Tạo lớp HangDoi biểu diễn cho một queue với kích thước cố ịnh ược xác ịnh bởi MAXSIZE.
- Dữ liệu của các phần tử trong ngăn xếp ược lưu trong một mảng có kích thước MAXSIZE.
- Dữ liệu của các phần tử ược lưu trong một mảng có kích thước MAXSIZE.
- Vị trí ầu và cuối hành ợi ược xác ịnh bởi thuộc tính frontrear, số lượng các phần
tử ược lưu trong count. lOMoARcPSD| 59149108
- Khi một ối tượng HangDoi ược khởi tạo thì số lượng phần tử = 0, front trỏ ến ô index = 0 và rear = -1.
- Các hoạt ộng cơ bản thực hiện trên HangDoi
+ IsEmpty: kiểm tra hàng ợi rỗng hay không
+ IsFull: Kiểm tra hàng ợi ầy hay không
+ Enqueue(data): thêm một phần tử có giá trị data vào uôi hàng ợi
+ Dequeue(): lấy ra và trả về phần tử ở ầu hàng ợi
+ Peek(): trả về giá trị phần tử ở ầu hàng ợi nhưng không loại nó ra khỏi hàng ợi
+ ToString(): phương thức ghi è, xác ịnh cách biểu diễn dạng chuỗi của HangDoi; có
thể ược gọi khi chọn WriteLine hay gọi ToString
- Các thuộc tính ược ịnh nghĩa trong lớp HangDoi
- Các phương thức ược triển khai cụ thể lOMoARcPSD| 59149108 lOMoARcPSD| 59149108
B. Sử dụng thư viện
1. Lớp Stack thuộc namespace System.Collections.Generic
- Khởi tạo ối tượng của Stack
Stack tŒn_biến = new Stack();
- Các thuộc tính và phương thức cơ bản của Stack Count Số lượng phần tử Clear() Xóa tất cả phần tử Contain (val)
Xác ịnh val có trong ngăn xếp không. Trả về True/False Peek()
Trả về ối tượng ầu ngăn xếp nhưng không loại bỏ nó Pop()
Trả về ối tượng ầu ngăn xếp và loại nó ra khỏi ngăn xếp Push(val)
Thêm phần tử vào ngăn xếp ToArray()
Chuyển ngăn xếp thành mảng
Xem thêm hướng dẫn tại:
https://learn.microsoft.com/en-
us/dotnet/api/system.collections.generic.stack1?view=net-8.0
2. Lớp Queue thuộc namespace System.Collections.Generic
- Khởi tạo ối tượng của Queue
Queue tŒn_biến = new Queue(); lOMoARcPSD| 59149108
- Các thuộc tính và phương thức cơ bản của Queue Count Số lượng phần tử Clear() Xóa tất cả phần tử Contain (val)
Xác ịnh val có trong hàng ợi không. Trả về True/False Dequeue()
Trả về ối tượng ầu hàng ợi và loại bỏ nó khỏi hàng ợi Enqueue(val)
Thêm phần tử vào hàng ợi Peek()
Trả về ối tượng ầu hàng ợi nhưng không
loại bỏ nó khỏi hàng ợi ToArray()
Chuyển hàng ợi thành mảng Bài tập:
1. Sử dụng cấu trúc Stack ể ảo một chuỗi nhập từ bàn phím
Ví dụ: nhập vào “Hello world”
In ra màn hình “world Hello”
2. Sử dụng Stack ể kiểm tra biểu thức sử dụng dấu ngoặc úng hay không. Biểu thức chỉ sử dụng ngoặc ơn.
3. Sử dụng cấu trúc Stack ể chuyển giá trị từ cơ số 10 sang cơ số 2 (thập phân sang nhị phân) và ngược lại.
Xây dựng ứng dụng Winform cho phép người dùng nhập một số nguyên dương vào và
thực hiện chuyển ổi sang số nhị phân.
Ví dụ hoạt ộng của chương trình lOMoARcPSD| 59149108
4. Viết chương trình mô phỏng quy trình xếp hàng ặt vé xem phim như sau:
Hàng ợi A chứa các khách chờ lấy vé (chỉ có tên).
Hàng ợi B chứa các ghế còn trống của rạp (chỉ có số ghế).
Danh sách C chứa danh sách khách ã mua vé (Khách thuộc lớp Customer có tên và ghế).
Lớp Customer ược ịnh nghĩa: lOMoARcPSD| 59149108
Khi chương trình bắt ầu, menu gồm các tùy chọn ược hiển thị 1- Nhập ghế trống
2- Nhập khách hàng (tên) vào hàng ợi 3- Phát vé cho khách hàng
- Nếu còn khách hàng ợi và còn ghế thì thêm khách hàng với số ghế vào C
- Nếu không ủ iều kiện thì thông báo cho người dùng 4- Thoát
5- Trả vé (phần mở rộng, không bắt buộc)
- Nhập vào tên khách hàng muốn trả vé
- Tìm kiếm trong C tên phù hợp
+ Nếu tìm thấy, thêm ghế ứng với khách hàng trả vé vào B, xóa khách hàng khỏi C
+ Nếu không tìm thấy, hiển thị thông báo