Code xây dựng queue bằng DSLK đơn bị sai

Đề: Xây dựng CTDL queue cài đặt bằng DSLK đơn để mô phỏng qui trình cho thuê máy ở một
phòng NET với các yêu cầu:

  • Danh sách các máy trống A – Dùng kiểu queue, mỗi nút chứa số máy;
  • Danh sách khách đang chờ nhận máy Q – Dùng kiểu queue, mỗi nút chứa họ tên người thuê.
  • Danh sách khách đang thuê máy H - Dùng kiểu DSLK đơn, mỗi nút có họ tên khách, giờ bắt
    đầu thuê máy, số máy.
  • Các chức năng cần phải có:
    o Đăng ký thuê máy: Còn máy trong A thì thêm khách vào H và lấy máy vừa cho thuê ra
    khỏi queue A. Nếu A trống thì thêm khách vào queue Q.
    o Trả máy: Thêm máy trả vào queue A, bỏ người đó khỏi danh sách thuê H.
    o Phục vụ: Kiểm tra A và Q để phục vụ và cập nhật lại A, Q, H.

Code mình đã làm: Link: http://codepad.org/j6PySmnp
Các bạn cho mình hỏi: ví dụ mình nhập số lượng máy của tiệm là 1, rồi mình nhập thông tin người thuê máy, mình chạy chức năng trả máy, mình nhập số máy là 1, sau đó mình nhập thuê máy thì nó báo là hết máy.
tức là nó không Thêm máy trả vào queue A, bỏ người đó khỏi danh sách thuê H, các bạn giúp mình sửa lỗi này với, thanks

Lúc bạn chạy hàm thuê máy
Chương trình sẽ gọi hàm xóa máy là hàm XoaA của bạn
Ở hàm XoaA bạn chỉ xóa pointer dau của A, còn pointer cuoi của A vẫn giữ giá trị ban đầu
Khi gọi hàm trả máy, ở hàm trả máy sẽ gọi hàm ThemA, do lúc đó A.cuoi của bạn khác NULL nên sẽ thêm vào sau A.cuoi còn giá trị A.dau vẫn bằng NULL. Nên khi gọi hàm kiểm tra số lượng máy, A.dau là NULL nên sẽ trả về không còn máy

1 Like

thanks bạn, mình cũng chưa hiểu rõ lắm, bạn có thể sửa hộ code giúp mình, để mình nghiên cứu lại được không bạn

thanks bạn, mà mình cũng chưa hiểu lắm, bạn có sửa code giúp mình để mình nghiên cứu lại được không ạ

Bạn thử sửa lại hàm XoaA theo thế này thử

int XoaA(QueueA &A)
{
	NodeA *xoa;
	xoa = A.dau;
	int x = xoa->soMay;
	if(A.dau->soMay == A.cuoi->soMay){
		A.dau = NULL;
		A.cuoi = NULL;
	}
	else {
		A.dau = A.dau->sau;
	}
	delete xoa;
	return x;
}
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?