Professional Documents
Culture Documents
GIẢI THUẬT
- Mỗi danh sách liên kết được cấu tạo từ các phần tử được gọi là các nút.
- Mỗi một nút gồm có 2 phần: phần dữ liệu và phần thông tin liên kết. link
- Mỗi DSLK luôn có một nút đầu (header) để chỉ định vị trí đầu tiên của DS.
flink
- Có 2 loại DSLK cơ bản: danh sách liên kết đơn và danh sách liên kết kép.
- Danh sách liên kết đơn: phần liên kết (link) chứa thông tin của nút tiếp theo.
blink
- Danh sách liên kết kép: phần liên kết chứa thông tin của nút trước (flink) và nút
sau (blink).
6.1. CÀI ĐẶT DANH SÁCH LIÊN KẾT ĐƠN
public Node(){ link
element = null;
link = null; public class LinkedList{
} public Node header;
public Node(object element){ public LinkedList(){
this.element = element; header = new Node("Header");
link = null; }
} . . .
} }
6.1. CÀI ĐẶT DANH SÁCH LIÊN KẾT ĐƠN
Chèn nút:
private Node Find(object element){ public void Insert(object newelement, object afterelement){
Node current = new Node(); Node current = new Node();
current = header; Node newnode = new Node(newelement);
while(current.element!=element) current = Find(afterelement);
current = current.link; newnode.link = current.link;
return current; current.link = newnode;
} }
6.1. CÀI ĐẶT DANH SÁCH LIÊN KẾT ĐƠN
Xóa nút:
public Node FindPrev(object element){ public void Remove(object element){
Node current = header; Node current = FindPrev(element);
while(current.link!=null && current.link.element!=element) if(current.link!=null)
current = current.link; current.link = current.link.link;
return current; }
}
6.1. CÀI ĐẶT DANH SÁCH LIÊN KẾT ĐƠN
public void Print(){
Node current = new Node();
current = header;
while(current.link!=null){
Console.WriteLine(current.link.element);
current = current.link;
}
}
6.1. CÀI ĐẶT DANH SÁCH LIÊN KẾT ĐƠN
Console.ReadLine();
}
6.1. CÀI ĐẶT DANH SÁCH LIÊN KẾT KÉP
public class Node2{ flink
public object element;
public Node2 flink, blink; blink
public Node2(){
element = null; public class DoubleLinkedList{
flink = blink = null; public Node2 header;
}
public Node2(object element){ public DoubleLinkedList(){
this.element = element; header = new Node2("Header");
flink = blink = null; }
} . . .
} }
6.1. CÀI ĐẶT DANH SÁCH LIÊN KẾT KÉP
private Node2 Find(object element){ public void Insert(object newelement, object afterelement){
Node2 current = new Node2(); Node2 current = new Node2();
current = header; Node2 newnode = new Node2(newelement);
while(current.element!=element){ current = Find(afterelement);
current = current.flink; newnode.flink = current.flink;
} newnode.blink = current;
return current; current.flink = newnode;
} }
6.1. CÀI ĐẶT DANH SÁCH LIÊN KẾT KÉP
public void Remove(object element) {
Node2 current = Find(element);
if (current.flink != null) {
current.blink.flink = current.flink;
current.flink.blink = current.blink;
current.flink = null;
current.blink = null;
}
}
6.1. CÀI ĐẶT DANH SÁCH LIÊN KẾT KÉP
In nút DSLK
private Node2 FindLast() { public void Print() {
Node2 current = new Node2(); Node2 current = new Node2();
current = header; current = FindLast();
while(!(current.flink == null)) while (!(current.blink == null)) {
current = current.flink; Console.WriteLine(current.element);
return current; current = current.blink;
} }
}
6.1. CÀI ĐẶT DANH SÁCH LIÊN KẾT KÉP
Console.ReadLine();
}
BÀI TẬP
1. Cài đặt danh sách liên kết đơn.
2. Cài đặt danh sách liên kết kép.
3. Danh sách liên kết tích hợp trong NET
using System.Collections.Generic;
…………
LinkedListNode<string> node = new LinkedListNode<string>("Mike");
…………