Chủ Nhật, 3 tháng 3, 2013

Một số bài tập pascal về danh sách liên kết đơn(P3)

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:
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}
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:

Trần Thế Ngọc nói...

hay cảm ơn bạn nhiều

Trần Thế Ngọc nói...

hay đó bạn cảm ơn nhiều nhe