Bài tập số 6
Dùng ngôn ngữ lập trình Pascal để thực hiện
công việc sau:
Tạo một danh sách liên kết đơn gồm 20 phần tử
là các số nguyên. Hãy chèn phần tử x nhập từ bàn phím vào vị trí thứ k (0<k<21)
của danh sách. Hãy in các phần tử của danh sách trước và sau khi chèn.
Bài tập số 7
Dùng ngôn ngữ lập trình Pascal để thực hiện
công việc sau:
Sinh ngẫu nhiên một danh sách liên kết đơn chứa
các số nguyên có thứ tự tăng. Hãy chèn số nguyên x được đọc vào từ bàn phím vào
danh sách liên kết sao cho sau khi chèn vẫn đảm bảo thứ tự. Hãy in các phần tử
của danh sách cả trước và sau khi chèn.
Bài tập số 8
Dùng ngôn ngữ lập trình Pascal để thực hiện
công việc sau:
Sinh ngẫu nhiên hai danh sách liên kết đơn chứa
các số nguyên đều có thứ tự tăng. Hãy ghép hai danh sách liên kết đơn này thành
một danh sách liên kết cũng có thứ tự tăng. Hãy in các phần tử của cả ba danh
sách trên.
Bài tập số 9
Dùng ngôn ngữ lập trình Pascal để thực hiện
công việc sau:
Tạo một danh sách liên kết đơn gồm 20 phần tử
là các số nguyên. Hãy xoá phần tử thứ k (0<k<21) của danh sách. Hãy in
các phần tử của danh sách trước và sau khi xoá.
Bài tập số 10
Dùng ngôn ngữ lập trình Pascal để thực hiện
công việc sau:
Sinh ngẫu nhiên một danh sách liên kết đơn chứa
n (0<n<100) các số nguyên. Hãy xoá đi k (k>0) phần tử liên tiếp của
danh sách liên kết kể từ vị trí thứ i (1<i<50) của danh sách. In ra các
phần tử của danh sách trước và sau khi xoá.
code:
code:
Thêm vào thủ tục chương trình
Procedure Chen (Var P: Contro; M: Contro; Q: Contro);
{Thu tuc thuc hien chen nut Q vao truoc nut M dang tro toi trong
danh sach P}
Var R: Contro;
Begin
{Tim nut truoc M}
R:=P;
While R^.Next <> M do
R:=R^.Next;
Q^.Next:=M;
If M=P then P:=Q
else R^.Next:=Q;
End;
Procedure ChenX (Var P:Contro)
{Thu tuc thuc hien chen 1 nut moi, co thong tin la X vao vi tri k
trong danh sach P}
Var R,Q: Contro; k,i: Integer;
Begin
New(Q);
Write('Nhap gia tri can chen: ');
Readln(Q^.Value);
Write('Nhap vi tri can chen: ');
Readln(k);
{Tim nut thu k, dung chon tro R duyet danh
sach}
R:=P;
i:=1;
While (i<k) and (R<>Nil) do
R:=R^.Next;
{i=k: Tim thay nut k}
if i=k then Chen(P,R,Q)
else
Writeln('Danh sach khong co nut thu ',k);
End;
Procedure TaoDsNgauNhienTangDan(Var P: Contro);
{Thu tuc thuc hien sinh ngau nhien 1 danh sach so nguyen theo thu
tu tang dan.}
{Co su dung thu tuc Chen(P,M,Q) da xay dung}
Var R,Q: Contro; i: integer;
Begin
{Sinh 10 phan tu thoi nhe}
P:=Nil;
For i:=1 to 10 do
Begin
New(Q);
Q^.Value:=Random(32767);
If P=Nil then P:=Q
Else
Begin
{Tim vi tri de chen}
R:=P;
While (R^.Value < Q.Value) and
(R<>Nil) do
Begin
{M la vi tri can chen de giu nguyen tinh sap xep}
M:=R;
R:=R^.Next;
End;
Chen(P,M,Q);
End;
End;
End;
Procedure ChenSapxep(Var P: Contro);
{Thu tuc thuc hien chen nut moi vao trong danh sach da sap xep
theo thu tu tang dan}
{Sau khi chen danh sach van giu nguyen thu tu tang}
Var R,M,Q: Contro;
Begin
Write('Nhapp gia tri can chen: ');
Readln(Q^.Value);
{Tim Vi tri chen}
R:=P;
While (R^.Value < Q.Value) and
(R<>Nil) do
Begin
{M la vi tri can chen de giu nguyen tinh
sap xep}
M:=R;
R:=R^.Next;
End;
Chen(P,M,Q);
End;
Procedure ChenCuoi(Var P: Contro; Var M: Contro; Q: Contro);
{Thu tuc thuc hien chen nut Q vao cuoi danh sach P, co M luon tro
toi nut cuoi cung trong danh sach}
Begin
If P=Nil then P:=Q
Else
M^.Next:=Q;
M:=Q;
End;
Procedure GhepDsSapxep(Var R: Contro; P:Contro; Q: Contro);
{Thu tuc thuc hien ghep 2 danh sach P,Q da duoc sap xep tang dan}
{Danh sach ket qua do R quan ly va van giu nguyen tinh sap xep}
Var P1,Q1,M: Contro;
Begin
R:=Nil;
M:=Nil;
P1:=P;
Q1:=Q;
While (P1<>Nil) and (Q1<>Nil)
do
If P1.Value < Q^.Value then
Begin
ChenCuoi(R,M,P1);
P1:=P1^.Next;
End
Else
Begin
ChenCuoi(R,M,Q1);
Q1:=Q1^.Next;
End;
{Neu P1<>Nil: Danh sach P chua het}
While P1<>Nil do
Begin
ChenCuoi(R,M,P1);
P1:=P1^.Next;
end;
{Neu Q1<>Nil: Danh sach Q chua het}
While Q1<>Nil do
Begin
ChenCuoi(R,M,Q1);
Q1:=Q1^.Next;
end;
End;
Procedure XoaViTri(Var P: Contro)
{Thu tuc xoa phan tu thu k trong danh sach, voi k nhap tu ban phim
0<k<21}
{Co su dung thu tuc Xoa(P,M) da xay dung}
Var R: Contro; k: integer;
Begin
Repeat
Write('Nhap vi tri can xoa: '); Readln(k);
If (k<=0) or (k>20) then Writeln('So
K phai nam trong khoang (0<k<21)');
Until (k>0) and (k<21);
{Timm nut thu k}
R:=P;
i:=1;
While (i<k) and (R^.Next<>Nil) do
Begin
R:=R^.Next;
i:=i+1;
end;
If i=k then Xoa(P,M);
end;
Procedure XoaLienTiep(Var P: Contro);
{Thu tuc thuc hien xoa lien tiep n phan tu trong danh sach tu vi
tri thu i}
{Co su dung thu tuc Xoa(P,M) da xay dung}
Var R: Contro; i,j,k: Integer;
Begin
Write('Nhap so luong phan tu can xoa: ');
Readln(k);
Repeat
Write('Nhap vi tri bat dau xoa: '); Readln(i);
If (i<=0) or (i>20) then Writeln('So
i phai nam trong khoang (0<i<21)');
Until (i>0) and (i<21);
{Tim nut thu i}
R:=P;
j:=1;
While (j<i) and (R^.Next<>Nil) do
Begin
j:=j+1;
R:=R^.Next;
End;
{Xoa}
While (k>0) and (R<>Nil) do
Begin
Xoa(P,R);
k:=k-1;
R:=R^.Next;
End;
End;
Phần thân. - Khai báo thêm con trỏ Q và R ở chỗ khai báo P
lúc đầu tiên
{Bai 6: Tao danh sach ban tu lam nhe}
{Bai 6: Tao danh sach ban tu lam nhe}
Writeln('Danh sach truoc khi chen:');
HienthiDanhsach(P);
ChenX(p);
Writeln('Danh sach sau khi chen:');
HienthiDanhsach(P);
{Bai 7: }
TaoDsNgauNhienTangDan(Q);
Writeln('Danh sach so nguyen ngau nhien tang dan:');
HienthiDanhsach(Q);
ChenSapxep(Q);
Writeln('Danh sach sau khi chen:');
HienthiDanhsach(Q);
{Bai8: }
TaoDsNgauNhienTangDan(Q);
TaoDsNgauNhienTangDan(P);
GhepDsSapxep(R,P,Q);
Writeln('Danh sach 1:');
HienthiDanhsach(P);
Writeln('Danh sach 2:');
HienthiDanhsach(Q);
Writeln('Danh sach 3: sau khi ghep:');
HienthiDanhsach(R);
{Bai 9: Tao danh sach nhu bai 6, gia su da co danh P, su dung luon
nhe}
Writeln('Danh sach truoc khi xoa:');
HienthiDanhsach(P);
XoaViTri(P);
Writeln('Danh sach sau khi xoa:');
HienthiDanhsach(P)
{Bai 10: Tao danh sach co gioi han so phan tu ban tu lam
nhe, su dung luon danh sach P da co}
XoaLienTiep(P);
2 nhận xét:
hay cảm ơn bạn nhiều
hay đó bạn cảm ơn nhiều nhe
Đăng nhận xét