You are on page 1of 7

Võ Tiến

Cấu Trúc Dữ Liệu Và Giải Thuật

Bài tập lớn 1


JJK RESTAURANT OPERATIONS

nhóm thảo luận CSE


https://www.facebook.com/groups/211867931379013

Tp. Hồ Chí Minh, Tháng 10/2023

https://www.facebook.com/groups/211867931379013 Trang 1/7


Nhóm thảo luận CSE
Võ Tiến

Mục lục
1 Chỉnh code hàm RED 3
1.1 bước 1 và 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 bước 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Bước 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Bước 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Bước 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.6 Bước 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.7 Tóm lại . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

https://www.facebook.com/groups/211867931379013 Trang 2/7


Nhóm thảo luận CSE
Võ Tiến

1 Chỉnh code hàm RED


1.1 bước 1 và 2
Code mẫu :

1 //* Bước 1 đuổi về không phải Thuật sư hay oán linh


2 if(energy == 0) return;
3 //* Bước 2 hàng chờ đã đầy đuổi về
4 else if(sizeCustomerInDesk + sizeCustomerQueue >= MAXSIZE * 2) return;

• có thể gộp chung lại

1 if(energy == 0 || sizeCustomerInDesk + sizeCustomerQueue >= MAXSIZE * 2)


,→ return;

• bước 2 có thể xét trong hàng đợi thôi vì trong hàng đợi có khách thì trong bàn đầy

1 if(sizeCustomerQueue >= MAXSIZE) return;

• các bạn có thể dùng if (energy) không cần gán 0


• có thể chỉnh if (sizeCustomerQueue − M AXSIZE >= 0)
• có thể đôi bước 1 lên trước bước 2

1.2 bước 3
Code mẫu 1 :

1 //* Bước 3 "thiên thượng thiên hạ, duy ngã độc tôn" : chung tên đuổi về
2 else
3 {
4 //TODO : xem thử khác hàng dùng bữa có chung tên không
5 customer* temp = customerX;
6 for(int i = 0; i < sizeCustomerInDesk; i++)
7 {
8 if(temp->name == name) return;
9 temp = temp->next;
10 }
11

12 //TODO : xem thử khác hàng đang chờ có chung tên không
13 temp = customerQueue;
14 for(int i = 0; i < sizeCustomerQueue; i++)
15 {
16 if(temp->name == name) return;
17 temp = temp->next;
18 }
19 }
20

Code mẫu 2 :

https://www.facebook.com/groups/211867931379013 Trang 3/7


Nhóm thảo luận CSE
Võ Tiến

1 //* Bước 3 "thiên thượng thiên hạ, duy ngã độc tôn" : chung tên đuổi về
2 else
3 {
4 customerTime* temp = CustomerTimeHead;
5 //* xem thử khác hàng có chung tên không với khách nào hay không
6 for(int i = 0; i < sizeCustomerInDesk + sizeCustomerQueue; i++)
7 {
8 //TODO tìm thử trung tên không
9 if(temp->data->name == name) return;
10 temp = temp->next;
11 }
12 }

• Có thể viết thành 1 hàm riêng

1 bool checkCustomerSameName()
2 {
3 // code
4 return false;
5 }

• thay vì dùng for ta dùng while với i

1 customerTime* temp = CustomerTimeHead;


2 //* xem thử khác hàng có chung tên không với khách nào hay không
3 int i = 0;
4 while(i < sizeCustomerInDesk + sizeCustomerQueue)
5 {
6 //TODO tìm thử trung tên không
7 if(temp->data->name == name) return;
8 temp = temp->next;
9 i ++;
10 }

• thay vì dùng for ta dùng while với nullptr

1 customerTime* temp = CustomerTimeHead;


2 //* xem thử khác hàng có chung tên không với khách nào hay không
3 while(temp != nullptr)
4 {
5 //TODO tìm thử trung tên không
6 if(temp->data->name == name) return;
7 temp = temp->next;
8 i ++;
9 }

• thay vì dùng for ta dùng for với nullptr

https://www.facebook.com/groups/211867931379013 Trang 4/7


Nhóm thảo luận CSE
Võ Tiến

1 ;
2 //* xem thử khác hàng có chung tên không với khách nào hay không
3 for(customerTime* temp = CustomerTimeHead; temp != nullptr; temp = temp->next)
4 {
5 //TODO tìm thử trung tên không
6 if(temp->data->name == name) return;
7 temp = temp->next;
8 i ++;
9 }

• có thể chỉnh head thành tail để duyệt lại theo chiều prev
• có thể đảo với bước 4, 5

1.3 Bước 4
Code mẫu : đọc trong code đi nha dài quá anh không ghép vô

• đươc new customer vào trong if

1 if(sizeCustomerQueue == 0)
2 {
3 customer* newCustomer = new customer(name, energy, nullptr, nullptr);
4 customerQueue = newCustomer;
5 customerQueue->next = customerQueue->prev = newCustomer;
6 customerTime* newCustomerTime = new customerTime (newCustomer, false);
7 CustomerTimeTail->next = newCustomerTime;
8 newCustomerTime->prev = CustomerTimeTail;
9 CustomerTimeTail = newCustomerTime;
10 return;
11 }
12 customer* newCustomer = new customer(name, energy, nullptr, nullptr);
13 newCustomer->next = customerQueue; //! cập nhật thằng mới vô
14 newCustomer->prev = customerQueue->prev; //! cập nhật thằng mới vô
15 customerQueue->prev = newCustomer->prev->next = newCustomer;
16 //& cập nhật số lượng khách nhà hàng
17 sizeCustomerQueue ++;
18

19

20 customerTime* newCustomerTime = new customerTime (newCustomer, false);


21 CustomerTimeTail->next = newCustomerTime;
22 newCustomerTime->prev = CustomerTimeTail;
23 CustomerTimeTail = newCustomerTime;
24 return;

• tác này thành 2 bước

1 if(sizeCustomerInDesk == MAXSIZE && sizeCustomerQueue == 0)


2 {
3 //TODO cập nhật thằng mới vô này là danh sách liên kết vòng đôi trong hàng
,→ chờ cần cập nhật prev và next
4 }
5 else if(sizeCustomerInDesk == MAXSIZE)

https://www.facebook.com/groups/211867931379013 Trang 5/7


Nhóm thảo luận CSE
Võ Tiến

6 {
7 //TODO thêm vào sau khách hàng đầu tiên (thêm vào cuối) dùng next
8 }

• viết 1 hàm riêng

1 bool insertCustomerQueue()
2 {
3 // code
4 return false;
5 }

• chỉnh lại thứ tự của mấy next và prev nếu hợp lí


• có thể đảo với bước 3, 5

1.4 Bước 5
• customerX = new customer (name, energy, nullptr, nullptr); có thể đưa ra ngoài gộp chung bước
dưới
• customerX->next = customerX->prev = customerX;); tác ra làm 2 bước
• tác ra hàm riêng

1.5 Bước 6
• chỉnh while for giống bước 3

• if(abs(energy - temp->energy) > abs(energy - customerX->energy)) có thể tạo 2 biến a và b rồi so


sánh nha
• có thể đưa code bước 7 vô luôn rồi return
• tác ra hàm riêng

1.6 Bước 7
• đảo bước thêm sau lên trước.
• tác ra hàm riêng

1.7 Tóm lại


• Nói chung hiểu code rồi chỉnh là tốt nhất này mấy mẹo anh thôi

• Tham khảo 3 bài code có nhiều cách lắm


• Chia hàm + đổi biến + đổi class ra ngoài vô trong + while + for + cách hiện thực + vị trí

https://www.facebook.com/groups/211867931379013 Trang 6/7


Nhóm thảo luận CSE
Võ Tiến

Anh đang mở lớp dạy DSA cho BTL1 + GK + LAB


nhóm thảo luận CSE
https://www.facebook.com/groups/211867931379013
CHÚC CÁC EM HỌC TỐT

https://www.facebook.com/groups/211867931379013 Trang 7/7


Nhóm thảo luận CSE

You might also like