Cách tốt nhất để tạo danh sách liên kết trong Java là gì?Làm cách nào để tạo Cấu trúc dữ liệu danh sách được liên kết trong Java?
Trả lời
Các giải pháp rõ ràng để các nhà phát triển quen thuộc với Java là sử dụng lớp LinkedList đã cung cấp trong java.util. Tuy nhiên, hãy nói, bạn muốn thực hiện triển khai của riêng mình vì một số lý do. Dưới đây là ví dụ nhanh về danh sách được liên kết chèn một liên kết mới ở đầu danh sách, xóa từ đầu danh sách và vòng qua danh sách để in các liên kết chứa trong đó. Enhancements để thực hiện này bao gồm làm cho nó một đúp danh sách liên kết, thêm các phương pháp để chèn và xóa từ giữa hoặc cuối, và bằng cách thêm được và loại phương pháp là tốt.
Lưu ý: Trong ví dụ, đối tượng Liên kết không thực sự chứa đối tượng Liên kết khác - nextLink thực sự chỉ là tham chiếu đến liên kết khác.
class Link {
public int data1;
public double data2;
public Link nextLink;
//Link constructor
public Link(int d1, double d2) {
data1 = d1;
data2 = d2;
}
//Print Link data
public void printLink() {
System.out.print("{" + data1 + ", " + data2 + "} ");
}
}
class LinkList {
private Link first;
//LinkList constructor
public LinkList() {
first = null;
}
//Returns true if list is empty
public boolean isEmpty() {
return first == null;
}
//Inserts a new Link at the first of the list
public void insert(int d1, double d2) {
Link link = new Link(d1, d2);
link.nextLink = first;
first = link;
}
//Deletes the link at the first of the list
public Link delete() {
Link temp = first;
if(first == null){
return null;
//throw new NoSuchElementException(); // this is the better way.
}
first = first.nextLink;
return temp;
}
//Prints list data
public void printList() {
Link currentLink = first;
System.out.print("List: ");
while(currentLink != null) {
currentLink.printLink();
currentLink = currentLink.nextLink;
}
System.out.println("");
}
}
class LinkListTest {
public static void main(String[] args) {
LinkList list = new LinkList();
list.insert(1, 1.01);
list.insert(2, 2.02);
list.insert(3, 3.03);
list.insert(4, 4.04);
list.insert(5, 5.05);
list.printList();
while(!list.isEmpty()) {
Link deletedLink = list.delete();
System.out.print("deleted: ");
deletedLink.printLink();
System.out.println("");
}
list.printList();
}
}
bạn cũng có thể dễ dàng cải thiện mã này để sử dụng Generics cho kiểu dữ liệu hơn là lưu trữ một int và một đôi. – shsteimer
@shsteimer: khá chắc chắn, nhưng kể từ khi sử dụng khá tốt mã này là để chứng minh kỹ thuật, nó sẽ không giúp được bất cứ ai. Nó sẽ chỉ khuếch tán ý tưởng cơ bản. –
Nó không phải là cách tiếp cận OO tốt để có 'liên kết công khai nextLink' và hoạt động trên nó bên ngoài lớp học. Nó có thể được tôn trọng khi 'Link' sẽ là một lớp bên trong của' LinkList'. Đó là một loạt các mã được viết như Java chỉ là một phiên bản-of-c. – Bart
Java có triển khai LinkedList mà bạn có thể muốn xem. Bạn có thể tải xuống JDK và nguồn của nó tại java.sun.com.
Sử dụng java.util.LinkedList. Như thế này:
list = new java.util.LinkedList()
Tốt hơn rất nhiều khi sử dụng java.util.LinkedList, vì nó có thể được tối ưu hóa hơn nhiều so với cách bạn sẽ viết.
Và nó sẽ làm việc lần đầu tiên. –
Danh sách được liên kết ở trên hiển thị theo hướng ngược lại. Tôi nghĩ rằng việc thực hiện đúng phương pháp chèn nên
public void insert(int d1, double d2) {
Link link = new Link(d1, d2);
if(first==null){
link.nextLink = null;
first = link;
last=link;
}
else{
last.nextLink=link;
link.nextLink=null;
last=link;
}
}
Thêm mới ở cuối trừ khi có quy định khác. :-) –
//slightly improved code without using collection framework
package com.test;
public class TestClass {
private static Link last;
private static Link first;
public static void main(String[] args) {
//Inserting
for(int i=0;i<5;i++){
Link.insert(i+5);
}
Link.printList();
//Deleting
Link.deletefromFirst();
Link.printList();
}
protected static class Link {
private int data;
private Link nextlink;
public Link(int d1) {
this.data = d1;
}
public static void insert(int d1) {
Link a = new Link(d1);
a.nextlink = null;
if (first != null) {
last.nextlink = a;
last = a;
} else {
first = a;
last = a;
}
System.out.println("Inserted -:"+d1);
}
public static void deletefromFirst() {
if(null!=first)
{
System.out.println("Deleting -:"+first.data);
first = first.nextlink;
}
else{
System.out.println("No elements in Linked List");
}
}
public static void printList() {
System.out.println("Elements in the list are");
System.out.println("-------------------------");
Link temp = first;
while (temp != null) {
System.out.println(temp.data);
temp = temp.nextlink;
}
}
}
}
- 1. Có cấu trúc dữ liệu trung gian nào được tạo trong danh sách hay không
- 2. Danh sách liên kết danh sách liên kết trong Java
- 3. Danh sách Javascript như cấu trúc dữ liệu?
- 4. Tạo cấu trúc dữ liệu như cấu trúc dữ liệu trong Java
- 5. Danh sách cấu trúc dữ liệu C# Efficiency
- 6. Cọ vẽ cấu trúc dữ liệu (Java)
- 7. Sắp xếp danh sách được liên kết trong Java
- 8. Danh sách liên kết chứa các danh sách được liên kết khác & miễn phí
- 9. Cấu trúc dữ liệu Trie - Java
- 10. Mảng cơ bản [] Cấu trúc dữ liệu cây trong Java
- 11. Làm cách nào để lấy địa chỉ thực của dữ liệu được liên kết từ trang cấu trúc?
- 12. Chuyển đổi cấu trúc dữ liệu MIDI sang Java (Danh sách, Bản đồ băm, ???)
- 13. Cấu trúc dữ liệu C#
- 14. Danh sách liên kết có phải là ADT hay là cấu trúc dữ liệu hay cả hai?
- 15. Java: cấu trúc dữ liệu được phiên bản?
- 16. Tạo danh sách được liên kết vòng tròn trong C#?
- 17. Cách tạo cấu trúc chứa danh sách của chính nó?
- 18. Cấu trúc dữ liệu có thể phát triển trong MATLAB
- 19. Cấu trúc dữ liệu Java Tham chiếu
- 20. Cấu trúc dữ liệu Delphi nào có thể chứa danh sách các số nguyên duy nhất?
- 21. Java câu hỏi cấu trúc dữ liệu
- 22. Làm cách nào để liên kết dữ liệu trong MongoDB?
- 23. Ví dụ thế giới thực khi nào Danh sách được liên kết nên được sử dụng?
- 24. Toán tử nhân được áp dụng cho danh sách (cấu trúc dữ liệu)
- 25. Danh sách liên kết đệ quy trong Java
- 26. Danh sách liên kết bốn là gì?
- 27. C++ vectơ/danh sách liên kết lai
- 28. Tôi nên sử dụng cấu trúc dữ liệu nào để tạo lớp "BigInteger" của riêng mình?
- 29. JAVA - Cấu trúc dữ liệu phù hợp nhất
- 30. Tôi làm cách nào để tạo mã băm cho cấu trúc dữ liệu tùy chỉnh?
Cách tốt nhất để thực hiện một danh sách liên kết là sử dụng được xây dựng trong danh sách liên kết. Không viết lại được xây dựng trong các lớp học. –
câu hỏi này là hợp pháp và rất xây dựng cho các lập trình viên thảo luận – anshulkatta