Khi dùng danh sách liên kết để biểu diễn hàng đợi thì phép thêm vào hàng đợi thì tương tự như thêm một phần tử vào cuối danh sách liên kết.
Giả sử ta cần một phần tử mới p có nội dung là NewInfo vào hàng đợị
Thuật toán:
Procedure Insert_queue ( NewInfo : Element; Var Front, Rear:Tro ); Var q,p :tro; Begin New(p) ; p^.Info := NewInfo ; P^. Link := nil; If Front = nil then
Begin
Rear:=p; End; Else Begin Rear^.Link := p; Rear := p; End; End; - Loại bỏ một phần tử của hàng.
Biến succ có giá trị là true nếu hàng đợi khác rỗng và nội dung lấy ra là Infox. Biến succ có nội dung là false nếu hàng đợi rỗng.
Thuật toán:
Procedure Delete_queue (Var Infox : Element; Var succ :boolean; Var Front, Rear:Tro);
Var
P:Tro; Begin
succ := false ; If Front <> nil then
Begin
succ := true; p := Front;
Front := p^.Link ; Infox := p^.Info ;
if Front = nil then Rear := nil ; Dispose(p);
End; End;
2.4.2.4. Ứng dụng.
Trong thực tế Queue có nhiều ứng dụng - Bộ đệm bàn phím.
- Hàng đợi lệnh trong CPỤ
BÀI TẬP CHƯƠNG 2
Bài tập 1: Viết chương trình chuyển đổi số nguyên (đơn vị giây) sang dạng giờ… phút…giâỵ
Dạng mẫu của chương trình khi chạy có thể như sau: Đưa vào số nguyên (đơn vị giây): 3812
3812 giây = 1 giờ 3 phút 32 giâỵ
Bài tập 2: Viết chương trình đọc một số nguyên rồi hiển thị ạ Các chữ số của số ấy, và tổng của các chữ số đó.
b. Số đảo ngược.
c. Hiệu của số đó với số đảo ngược
Bài 3: Viết chương trình đọc một số nguyên, rồi hiển thị giá trị sau:
S = 1-2+3-4+5-6+…+(-1)n*n
Bài 4: Viết chương trình hiển thị tất cả các số nguyên gồm có 3 chữ số sao cho tổng tất cả các chữ số bằng tích của chúng.
Bài 5: Viết chương trình nhập vào một chuỗi chứa ho, tên và chữ lót rồi chuyển sang dạng tên, họ và chữ lót. Ví dụ, nếu chuỗi là “Hoàng Nguyệt Kim” chương trình sẽ chuyển thành “Nguyệt Hoàng Kim”.
Bài 6: Viết chương trình đọc một chuỗi (một dòng văn bản) rồi hiển thị mỗi từ trên một hàng và số các từ trong câu ấỵ
Bài tập 7: Viết chương trình nhập vào một dãy số thực và số thực x. Thông báo lên màn hình số lượng các phần tử trong dãy bằng x và vị trí của chúng.
Bài tập 8: Nhập vào một mảng các số nguyên. a/ Xếp lại mảng đó theo thứ tự giảm dần.
b/ Nhập vào một số nguyên từ bàn phím. Chèn số đó vào mảng sao cho mảng vẫn có thứ tự giảm dần. (không được xếp lại mảng)
Gợi ý:
- Tìm vị trí cần chèn: ị
- Đẩy các phần tử từ vị trí i tới n sang phải 1 vị trí. - Gán: A[i]=x;
Bài tập 9: Cho 2 mảng số nguyên: Mảng A có m phần tử, mảng B có n phần tử. a/ Sắp xếp lại các mảng đó theo thứ tự giảm dần.
b/ Trộn 2 mảng đó lại thành mảng C sao cho mảng C vẫn có thứ tự giảm dần (Không được xếp lại mảng C).
- Dùng 2 chỉ số i,j để duyệt qua các phần tử của 2 mảng A, B và k là chỉ số cho mảng C.
- Trong khi (i<=m) và (j<=n) thì:
{Tức là khi đồng thời cả 2 dãy A, B đều chưa duyệt hết} + Nếu A[i]>B[j] thì: C[k]:=A[i]; i:=i+1;
+ Ngược lại: C[k]:=B[j]; j:=j+1;
Nếu dãy nào hết trước thì đem phần còn lại của dãy kia bổ sung vào cuối dãy C.
Bài tập 10: Viết chương trình nhập vào 2 mảng số nguyên A, B đại diện cho 2 tập hợp (không thể có 2 phần tử trùng nhau trong một tập hợp). Trong quá trình nhập, phải kiểm tra: nếu phần tử vừa nhập vào đã có trong mảng thì không bổ sung vào mảng.
a/ In ra màn hình hợp của 2 tập hợp A, B. b/ In ra màn hình hiệu của 2 tập hợp A, B.
Gợi ý:
a/ - In ra màn hình tất cả các phần tử của tập hợp Ạ
- Duyệt qua tất cả các phần tử bi∈B. Nếu bi∉A thì in bi ra màn hình. b/ Duyệt qua tất cả các phần tử ai∈Ạ Nếu ai∉B thì in ai ra màn hình.
Bài tập 11: Viết chương trình tính tổng của 2 đa thức h(x) = f(x) + g(x). Trong đó, mỗi đa thức có dạng: a0 + a1x + a2x2 + ... + anxn.
Gợi ý:
Dùng các mảng A, B, C để lưu trữ các hệ số ai của các đa thức f(x), g(x) và h(x).
Bài tập 12 :
Cho DSLK mỗi phần tử là một bản ghi tự trỏ bao gồm các thành phần sau : Mã sinh viên.
Họ sinh viên Lớp
Điểm TB (ĐTB)
Yêu cầu : Viết chương trình bao gồm các chức năng sau : 1. Tạo DSLK cho đến khi nhấn phím escape thì dừng. 2. In DSLK vừa nhập.
3. Xóa 1 phần tử trong DSLK có họ tên được nhập từ bàn phím.
4. Thêm một phần tử vào trong DSLK có mã sinh viên, họ sinh viên, lớp, ĐTB được nhập vào từ bàn phím.
5. Tìm 1 phần tử trong DSLK dựa vào mã sinh viên.
6. Sắp xếp các phần tử trong DSLK tăng dần theo điểm trung bình.
Bài 13: Viết chương trình bao gồm các chức năng sau:
ạ Tạo danh sách liên kết, chứa các số nguyên nhập từ bàn phím trên một hàng, quá trình nhập dừng khi nhập số 0.
b. Hiển thị các phần tử trong danh sách nói trên. c. Đếm số nút trong danh sách liên kết.
d. Tính giá trị trung bình của các phần tử trong danh sách. ẹ Xác định nút cuối cùng trong danh sách.
f. Thêm một nút vào cuối danh sách.
g. Chèn một nút vào sau nút thứ n trong danh sách, với n cho trước. h. Xóa một phần tử thứ n trong danh sách với n cho trước.
Bài 14: Viết chương trình trộn hai danh sách liên kết có thứ tự tăng dần và tạo thành danh sách thứ 3 cũng tăng dần (trong hai trường hợp: 2 danh sách ban đầu được bảo toàn và không bảo toàn).
Bài 15: Giả sử L1 và L2 là hai danh sách liên kết cho trước. Viết thuật toán hiển thị:
ạ Phần giao của hai danh sách. b. Phần hội của hai danh sách. c. Hiệu của hai danh sách.
Bài 16: Viết chương trình dùng ngăn xếp để chuyển một số thập phân sang dạng nhị phân.
Bài 17: Dùng các phép toán cơ bản trên ngăn xếp để lấy ra một phần tử ở đáy ngăn xếp nhưng để lại nguyên nội dung.