Hàng Đ I Queue

You might also like

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 28

Cấu trúc dữ liệu

hàng đợi - Queue


2

Hàng đợi (queue) là một cấu trúc dữ liệu hoạt động theo
I. Hàng đợi(queue) cơ chế FIFO (First In First Out), tạm dịch là “vào trước
là gì ? ra trước”. Có nghĩa là phần tử nào được thêm hàng đợi
trước thì sẽ được lấy ra trước.
3

Có thể hình dung hàng đợi như một đoàn người xếp hàng mua vé.
Người nào xếp hàng trước sẽ được mua vé trước và ra khỏi hàng để
nhường vị trí cho người xếp hàng ngay phía sau.
○ Có thể xem hàng đợi (queue) là một kiểu danh sách có 2 phép
toán đặc trưng là:

 Bổ sung một phần tử vào cuối danh sách (rear)

 Loại bỏ một phần tử ở đầu danh sách (front)



4

○ Một số thao tác thông dụng trên queue như:

 enqueue(): thêm một phần tử vào queue.

 dequeue(): loại bỏ một phần tử ra khỏi queue.

 isFull(): kiểm tra queue có đầy chưa. Số lượng phần tử trong queue do người dùng quy
định. Tùy trường hợp chúng ta mới cần sử dụng hàm isFull().

 isEmpty(): kiểm tra queue có rỗng hay không.

○ Trong lập trình, có 2 cách thường dùng để xây dựng queue là sử dụng mảng (array) và
danh sách liên kết (linked list).
II. Cài đặt queue
trên mảng
6
Các thao tác cần có khi cài đặt hàng đợi queue bằng
mảng đó là:

1  Khởi tạo Queue: Init (q)


 Kiểm tra Queue rỗng: IsEmpty (q)
 Kiểm tra Queue đầy: IsFull (q)
 Thêm phần tử vào Queue: Add(q, x)
○ Lấy phần tử ra khỏi Queue: Remove (q)
7

Trước khi đi vào chi tiết các thao tác trên ta có hàng
đợi khi cài đặt bằng mảng sẽ được khai báo như sau:
8

2.1 Hàm khởi tạo queue


○ Để khởi tạo hàng đợi ta cần có lệnh khởi tạo front = 0 và rear = -1 sẽ
2. Hàm khởi tạo và tạo ra một queue rỗng, sau khi thực hiện khởi tạo thành công ta sẽ
kiểm tra hàng đợi đảm bảo các thao tác trên queue được thực hiện đúng đắn.
queue bằng mảng

○ Hàm void Init(QUEUE &q) dưới đây nhận QUEUE &q là hàng đợi
cần khởi tạo và thực hiện gán int front = 0; và int rear = -1;
○ Trước khi thực hiện việc lấy phần tử trong hàng đợi ra, ta cần 9
phải đảm bảo việc kiểm tra queue đó là không rỗng. Nếu queue
là rỗng thì không được phép lấy phần tử.

2.2 Hàm kiểm


tra queue rỗng ○ Ở phần khởi tạo hàng đợi ta đã gán int front = 0; và int rear = -1;
(nghĩa là front > rear ), vì vậy để kiểm tra rằng hàng đợi có là
rỗng hay không ta chỉ cần thực hiện kiểm tra nếu front > rear thì
hàng đợi đó đang rỗng, ngược lại thì không rỗng!
10

○ Việc kiểm tra queue đã đầy hay chưa được


gọi đến trước khi thực hiện thao tác đưa một
phần tử vào queue. Nếu queue đó đầy thì
2.3 Kiểm tra phần tử cuối cùng của queue đó bằng MAX
queue đầy – 1 (trong đó MAX là số lượng phần tử mà
ban đầu ta đã định nghĩa). Việc đó tương
đương với việc so sánh int rear có bằng
MAX – 1 hay không?
11

3. Hàm add và
hàm remove với
queue bằng mảng
○ Add chính là thao tác thêm phần tử mới vào trong hàng đợi. Việc
12
thêm phần tử mới vào hàng đợi queue luôn luôn đặt phần tử được
thêm vào cuối hàng đợi.
○ Trước khi thêm vào hàng đợi ta sẽ kiểm tra xem hàng đợi đó đã
3.1 Hàm add đầy hay chưa, nếu chưa đầy thì thực hiện việc thêm phần tử vào
cuối hàng đợi.
trong queue
○ Hàm void Add(QUEUE &q, int x) nhận QUEUE &q là hàng đợi
cần thêm phần tử và int x là giá trị phần từ cần thêm vào cuối
hàng đợi.
○ Thao tác remove chính là thao tác lấy phần tử trong hàng đợi ra13
và đồng thời xóa đi phần tử đó. Việc lấy phần tử của hàng đợi
luôn được thực hiện bằng cách lấy phần tử ở đầu hàng đợi đó ra.

3.2 Hàm remove ○ Hàm int Remove(QUEUE &q) nhận QUEUE &q là hàng đợi cần
trong queue thực hiện lấy ra phần tử đầu, hàm này thực hiện trả về phần tử
đầu tiên của hàng đợi và đồng thời xóa đi phần tử vừa được lấy
ra.
4.Nhập xuất phần tử trong mảng hàng đợi queue
Để nhập được N phần tử vào trong hàng đợi ta cần sử dụng lại hàm
void Add() ở trên và kết hợp với vòng lặp for. Để thực hiện lấy ra tất
cả phần tử cũng tương tự như vậy.
○ Hàm nhập N phần tử vào trong hàng đợi cài đặt bằng mảng như
sau:
4.Nhập xuất phần tử trong mảng hàng đợi queue
○ Hàm xuất ra những phần tử có trong hàng đợi nhưng không xóa đi
chúng được biểu diễn như sau:
16

Cho một struct sinh viên chứa các thông


tin sau (mã sinh viên, họ tên, tổng kết).
5.Bài tập Hãy viết 1 chương trình C/C++ để thực
hiện các chức năng sau:
- Thêm 1 sinh viên vào Queue
- Lấy 1 sinh viên ra khỏi Queue
- Kiểm tra xem Queue còn bao nhiêu
sinh viên
17
Tạo struct

5.Bài tập
- Thêm 1 sinh viên vào Queue
- Lấy 1 sinh viên ra khỏi Queue
- Kiểm tra xem Queue còn bao nhiêu sinh viên
21
Hàm trả về độ dài chuỗi của
mảng A

5.Bài tập
cắt chuỗi A, n ký tự từ bên trái
cắt chuỗi A, n ký tự từ bên phải
=> cắt chuỗi A, n ký tự từ vị trí thứ k (k từ 1)
trả về true nếu k có trong mảng A và ngược lại là false
nhập vào số k và chèn k vào đầu mảng A
=> xóa phần tử đầu tiên của mảng A có n phần tử
sắp xếp lại mảng A tăng dần/giảm dần

You might also like