//Họ và tên :Trần Văn Linh
//MSV:581597
//Lớp:K58QLTT
---------------------------------------------------------------------------------
A.Giải thuật thêm một nút vào danh sách liên đơn
Bài này mình sẽ giới thiệu 3 trường hợp bổ sung trong danh sách liên kết đơn.
Mình sẽ dùng 2 biến con trỏ F, R là nút đầu tiên, nút cuối cùng của danh sách.
Lưu ý : new <=AVAIL và P=>AVAIL để biểu thị việc cấp phát và thu hồi bộ nhớ.
TH1. Giải thuật bổ sung vào nút đầu tiên
- Vào :Phần tử dữ liệu x
- Ra: Không có
procedure Insert(F,X)
1,{Tạo nút mới}
new <=AVAIL;
infor(new):=X;
Link(new):=null;
2,{Bổ sung}
Link(new):=F;
F:=new;
3,{Kết thúc}
Return.
TH2. Giải thuật bổ sung vào sau nút M
-Vào :M,X
-Ra: Không có
procedure Insert(F,M,X)
1,{Tạo nút mới}
new <=AVAIL;
infor(new):=X;
Link(new):=null;
2,{Bổ sung}
{Trường hợp danh sách rỗng}
if F=null then
F:=new;
else
begin
Link(new):=Link(M);
Link(M):=new;
end
3,{Kết thúc}
Return.
TH3. Giải thuật bổ sung vào nút cuối cùng
procedure Insert(F,R,M,X)
1,{Tạo nút mới}
new <=AVAIL;
infor(new):=X;
Link(new):=null;
2,{Bổ sung}
{Trường hợp danh sách rỗng}
if F=null then
begin
F:=new;
R:=new;
else
begin
Link(R):=new;
R:=new;
end
3,{Kết thúc}
Return.
B. Giải thuật tiềm kiếm một nút trong danh sách liên đơn khi biết trường thông tin.
Vào :F,thông tin nút cần tìm kiếm
Ra: Nút cần tìm kiếm
Function Search(F,X)
1{Kiểm tra danh sách rỗng}
if F=null
begin
write('Danh sách rỗng');
return;{kết thúc}
end
2,{Tìm kiếm}
P:=F;
while P#null Do
begin
if infor(P)=X
begin
Q:=P;{nút tìm thấy}
return;{Dừng vòng lặp,thay cho lệnh break trong C}
end;
P=Link(P);
end
3,{Kiểm tra xem có tồn tại nút cần tìm không?}
if Q=null
begin
write('Không tồn tại nút cần tìm kiếm.!');
return;{Kết thúc}
end
else
Search:=Q;{Trả về nút được tìm thấy}
4,{Kết thúc}
Return.
C. Giải thuật xóa một nút có trường thông tin là x trong danh sách liên kết đơn.
Vào:F,X
Ra: Không có
Procedure Delete(F,X)
1{Kiểm tra danh sách rỗng}
if F=null
begin
write('Danh sách rỗng');
return;{kết thúc}
end
2,{Tìm nút cần xóa}
P:=F;
while P# null Do
begin
if infor(P)=X then
return;{Dừng vòng lặp,thay cho lệnh break trong C}
Q:=P;
P:=Link(P);{nút cần xóa}
end
3,{xóa bỏ}
if P # null
begin
if P=F then
F=Link(F);
else
begin
Link(Q):=Link(P);
end
P=>AVAIL;{Thu hồi bộ nhớ}
end
4,{Kết thúc}
Return.
//MSV:581597
//Lớp:K58QLTT
---------------------------------------------------------------------------------
A.Giải thuật thêm một nút vào danh sách liên đơn
Bài này mình sẽ giới thiệu 3 trường hợp bổ sung trong danh sách liên kết đơn.
Mình sẽ dùng 2 biến con trỏ F, R là nút đầu tiên, nút cuối cùng của danh sách.
Lưu ý : new <=AVAIL và P=>AVAIL để biểu thị việc cấp phát và thu hồi bộ nhớ.
TH1. Giải thuật bổ sung vào nút đầu tiên
- Vào :Phần tử dữ liệu x
- Ra: Không có
procedure Insert(F,X)
1,{Tạo nút mới}
new <=AVAIL;
infor(new):=X;
Link(new):=null;
2,{Bổ sung}
Link(new):=F;
F:=new;
3,{Kết thúc}
Return.
TH2. Giải thuật bổ sung vào sau nút M
-Vào :M,X
-Ra: Không có
procedure Insert(F,M,X)
1,{Tạo nút mới}
new <=AVAIL;
infor(new):=X;
Link(new):=null;
2,{Bổ sung}
{Trường hợp danh sách rỗng}
if F=null then
F:=new;
else
begin
Link(new):=Link(M);
Link(M):=new;
end
3,{Kết thúc}
Return.
TH3. Giải thuật bổ sung vào nút cuối cùng
procedure Insert(F,R,M,X)
1,{Tạo nút mới}
new <=AVAIL;
infor(new):=X;
Link(new):=null;
2,{Bổ sung}
{Trường hợp danh sách rỗng}
if F=null then
begin
F:=new;
R:=new;
else
begin
Link(R):=new;
R:=new;
end
3,{Kết thúc}
Return.
B. Giải thuật tiềm kiếm một nút trong danh sách liên đơn khi biết trường thông tin.
Vào :F,thông tin nút cần tìm kiếm
Ra: Nút cần tìm kiếm
Function Search(F,X)
1{Kiểm tra danh sách rỗng}
if F=null
begin
write('Danh sách rỗng');
return;{kết thúc}
end
2,{Tìm kiếm}
P:=F;
while P#null Do
begin
if infor(P)=X
begin
Q:=P;{nút tìm thấy}
return;{Dừng vòng lặp,thay cho lệnh break trong C}
end;
P=Link(P);
end
3,{Kiểm tra xem có tồn tại nút cần tìm không?}
if Q=null
begin
write('Không tồn tại nút cần tìm kiếm.!');
return;{Kết thúc}
end
else
Search:=Q;{Trả về nút được tìm thấy}
4,{Kết thúc}
Return.
C. Giải thuật xóa một nút có trường thông tin là x trong danh sách liên kết đơn.
Vào:F,X
Ra: Không có
Procedure Delete(F,X)
1{Kiểm tra danh sách rỗng}
if F=null
begin
write('Danh sách rỗng');
return;{kết thúc}
end
2,{Tìm nút cần xóa}
P:=F;
while P# null Do
begin
if infor(P)=X then
return;{Dừng vòng lặp,thay cho lệnh break trong C}
Q:=P;
P:=Link(P);{nút cần xóa}
end
3,{xóa bỏ}
if P # null
begin
if P=F then
F=Link(F);
else
begin
Link(Q):=Link(P);
end
P=>AVAIL;{Thu hồi bộ nhớ}
end
4,{Kết thúc}
Return.