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á.
- Thêm các hàm và thủ tục sau vào chương trình
Code:
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 này nối thêm vào thân chương trình chính
- Khai báo thêm con trỏ Q và R ở chỗ khai báo P lúc đầu tiên
Code:
{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);
- Với những gì mình đã Post lên cho bạn, mình đã cố gắng để chương trình đơn giản ở mức tối đa. Còn có những cách khác có thể làm chương trình ngắn hơn và chạy nhanh hơn, nhưng sẽ khó hiểu cho những bạn mới làm quen với kiểu dữ liệu con trỏ này.
- Cũng sẽ có những lỗi dấu chấm dấu phảy, khai báo thiếu biến, các bạn tự sửa nha. Vì cũng ko có Pascal để test
Bookmarks