1. Định nghĩa một nút
Để đơn giản, ta chỉ định nghĩa một nút có giá trị kiểu int:
//Chương trình 1a
public class Node{
private int value;
/* Các phương thức khởi dựng */
public Node(){
value = 0;
}
public Node(int value){
this.value = value;
}
/* Phương thức truy nhập thuộc tính value */
public int getValue(){
return value;
}
public void setValue(int value){
this.value = value;
}
}
2. Ngăn xếp Ngăn xếp (stack) có các thuộc tính cục bộ:
• Mảng lưu các nút của ngăn xếp
Các thao tác đối với ngăn xếp:
• Thêm vào một nút
• Lấy ra một nút
Cài đặt ngăn xếp
• Ta coi đỉnh ngăn xếp là cuối mảng lưu giữ các nút. Do đó, các thao tác thêm vào và lấy ra sẽ thêm vào cuối mảng hoặc lấy nút ở cuối mảng ra.
• Mảng các giá trị được khai báo động để tiết kiệm bộ nhớ.
//Chương trình 1b
public class MyStack{
private Node[] values;
/* Các phương thức khởi dựng */
public MyStack(){}
public MyStack(Node[] values){
this.values = values;
}
/* Phương thức lấy ra một node từstack */
public Node pop(){
Node result = null;
if ((values != null) && (values.length > 0)){
result = values[values.length - 1];
// Loại bỏnode cuối cùng
Node[] tmpNode = new Node[values.length - 1];
for (int i = 0; i < values.length – 1; i++)
tmpNode[i] = values[i];
this.values = tmpNode;
}
return result;
}
/* Phương thức thêm một node vào stack */
public void push(Node node){
if (values == null){ // Ngăn xếp đang rỗng
values = new Node[1];
values[0] = node;
}
else{ // Ngăn xếp đã có dữliệu
Node[] tmpNode = new Node[values.length + 1];
for (int i = 0; i < values.length; i++)
tmpNode[i] = values[i];
tmpNode[values.length] = node;
this.values = tmpNode;
}
}
}
3. Hàng đợi Hàng đợi (queue) có các thuộc tính cục bộ:
• Mảng các giá trị trong hàng đợi
Các thao tác với hàng đợi:
• Thêm vào một nút vào cuối hàng đợi
• Lấy ra một nút từ đầu hàng đợi
Chương trình 2 cài đặt lớp hàng đợi
//Chương trình 2
public class MyQueu{
private Node[] values;
/* Các phương thức khởi dựng */
public MyQueu(){}
public MyQueu(Node[] values){
this.values = values;
}
/* Phương thức lấy ra một node từ đầu queu */
public Node remove(){
Node result = null;
if ((values != null) && (values.length > 0)){
result = values[0];
// Loại bỏnode đầu hàng đợi
Node[] tmpNode = new Node[values.length - 1];
for (int i = 0; i<values.length – 1; i++)
tmpNode[i] = values[i + 1];
this.values = tmpNode;
}
return result;
}
/* Phương thức thêm một node vào cuối queu */
public void insert(Node node){
if (values == null){ // Hàng đợi đang rỗng
values = new Node[1];
values[0] = node;
}
else{ // Hàng đợi đã có dữliệu
Node[] tmpNode = new Node[values.length + 1];
for (int i = 0; i<values.length; i++)
tmpNode[i] = values[i];
tmpNode[values.length] = node;
this.values = tmpNode;
}
}
}

0 Comment to "[Java] Ngăn xếp và Hàng đợi"
Post a Comment