Предисловие
Связанный список является общей базовой структурой данных. Это линейная таблица, но она не хранится последовательно в памяти. Он хранится в форме цепи. Каждый узел хранит «указатель» следующего узла. Данные в Java делятся на ссылки на типы данных и основные типы данных. В Java нет концепции указателей, но для связанных списков указатели относятся к адресу ссылочных типов данных.
Связанные списки и массивы являются линейными структурами данных, а их длина зафиксирована для массивов. Поскольку они непрерывны в памяти, они более подходят для поиска и обхода. Связанные списки не хранятся не в памяти, а поскольку они состоят из «указателей», более удобно сравнивать массивы при вставке и удалении.
Следующий код реализует простую структуру данных связанного списка, описанную на языке Java, посредством внутренних классов и рекурсивных методов. Давайте посмотрим на подробное введение.
Определение связанной структуры данных списка
Во -первых, давайте посмотрим на определение связанной структуры данных списка, код заключается в следующем:
класс NodeManager {Private Node Root; // root node private int currentIndex = 0; // node serial number, each operation starts from 0 public void add(int data) {} public void delNode(int data) {} public void print() {} public boolean findNode(int data) {} public boolean updateNode(int oldData, int newData) {} // Insert public void insert(int index, int data) {} // Who owns the data and Предоставляет Node класса метода {private int data; частный узел следующий; // Принять текущий тип в качестве свойства Public Node (int Data) {this.Data = data; } public void setData (int data) {this.data = data; } public int getData () {return data; } // Добавить узел public void addNode (int data) {} // delete node public void delnode (int data) {} // Вывод всех узлов public void printNode () {} // Найти, существует ли узел public boolean findnode (int data) {} // modify node public boolen updateNode (int oldData, intAta / {} // modify node public boolean Node public void insertNode (int index, int data) {}}}Для определения связанных списков класс NodeManager используется для управления связанными операциями списка, в то время как внутренний узел класса участника используется для предоставления связанных данных списков и структуры цепочки. Для пользователей класса данные не доступны напрямую, поэтому работает класс NodeManager, а внутренний узел класса обеспечивает реальное управление данными. Следовательно, класс узлов должен предоставить реальные методы работы данных, а класс Nodemanager также должен предоставить набор методов для работы связанных списков внешне. Следовательно, как класс NodeManager, так и класс узлов обеспечивают, казалось бы, одни и те же методы, но фактическое значение не одно и то же.
Давайте проверим метод add () в классе Nodemanager и классе узлов. Код заключается в следующем:
public void add (int data) {if (root == null) {root = new Node (data); } else {root.addnode (data); }} // Добавить узлы public void addNode (int data) {if (this.next == null) {this.next = new Node (data); } else {this.next.addnode (data); }}Приведенный выше метод в коде является методом в классе Nodemanager, а следующим методом является метод в классе узла.
В классе менеджера представлена переменная элемента root, которая используется для управления головным узлом связанного списка. Следовательно, при добавлении узла он сначала определит, является ли корень пустым. Если он пуст, узел будет сохранен непосредственно корнем. Если корень не является пустым, он будет добавлен с помощью метода addNode () в классе узла. Идея добавления к точке состоит в том, чтобы найти последний узел текущего связанного списка и назначить новое дополнение к следующей переменной элемента, что узел присваивается последнему узлу.
Добавить, удалить, изменить и проверить связанный список
Та же идея также дается другие операции в связанных списках. Полный код для добавления, удаления, поиска и вывода связанных списков заключается в следующем:
класс NodeManager {Private Node Root; // root node private int currentIndex = 0; // Узел серийный номер, каждая операция начинается с 0 public void add (int data) {if (root == null) {root = new Node (data); } else {root.addnode (data); }} public void delnode (int data) {if (root == null) return; if (root.getData () == data) {node tmp = root; root = root.next; tmp = null; } else {root.delnode (data); }} public void print () {if (root! = null) {System.out.print (root.getData () + ""); root.printnode (); System.out.println (); }} public boolean findnode (int data) {if (root == null) вернуть false; if (root.getData () == data) {return true; } else {return root.findnode (data); }} public boolean updateNode (int olddata, int newdata) {if (root == null) вернуть false; if (root.getdata () == olddata) {root.setData (newdata); вернуть истину; } else {return root.updatenode (olddata, newdata); }} // вставить public void insert (int index, int data) {if (index <0) return; currentIndex = 0; if (index == currentIndex) {node newNode = new Node (data); newnode.next = root; root = newnode; } else {root.insertNode (index, data); }} // Кто бы ни владеет данными, который предоставляет узлом класса метода {private int data; частный узел следующий; // Принять текущий тип в качестве свойства Public Node (int Data) {this.Data = data; } public void setData (int data) {this.data = data; } public int getData () {return data; } // Добавить узлы public void addNode (int data) {if (this.next == null) {this.next = new Node (data); } else {this.next.addnode (data); }} // удалить узл public void delnode (int data) {if (this.next! = Null) {if (this.next.getData () == data) {node tmp = this.next; this.next = this.next.next; tmp = null; } else {this.next.delnode (data); }}} // выводить все узлы public void printNode () {if (this.next! = Null) {System.out.print (this.next.getData () + ""); this.next.printnode (); }} // Узнайте, существует ли узел public boolean findnode (int data) {if (this.next! = Null) {if (this.next.getData () == data) {return true; } else {return this.next.findnode (data); }} вернуть false; } // Модифицируйте Node public boolean updateNode (int olddata, int newdata) {if (this.next! = Null) {if (this.next.getData () == oldData) {this.next.setData (newData); вернуть истину; } else {return this.next.updatenode (olddata, newdata); }} вернуть false; } // Вставить узл public void insertNode (int index, int data) {currentIndex ++; if (index == currentIndex) {node newNode = new Node (data); newnode.next = this.next; this.next = newnode; } else {this.next.insertnode (index, data); }}}}}Выше приведено полный код для основной работы связанного списка. Ниже приведен код вызова для тестирования, код заключается в следующем:
public class linklist {public static void main (string [] args) {nodemanager nm = new nodemanager (); System.out.println («Адрес связанного списка (добавить 5, 4, 3, 2, 1)»); nm.add (5); nm.add (4); nm.add (3); nm.add (2); nm.add (1); nm.print (); System.out.println («Удалить список связанного списка (Delete 3)»); nm.delnode (3); nm.print (); System.out.println («Взгляд в список связанных списков (поиск 1)»); System.out.println (nm.findnode (1)); System.out.println («Список связывания (найти 10)»); System.out.println (nm.findnode (10)); System.out.println ("Список обновлений (обновление 1 по 10)"); nm.updateNode (1, 10); nm.print (); System.out.println ("Вставка списка (вставка 20 на первую позицию)"); nm.nmerser (1, 20); nm.print (); System.out.println ("Вставка списка (вставка 30 в первую позицию)"); nm.nmerser (1, 20); nm.print (); System.out.println ("Вставка списка (вставка 30 в нулевой позиции)"); nm.nmerser (0, 30); nm.print (); }}Скомпилируйте и запустите код, результат заключается в следующем:
Я использовал много знаний о структурах данных в классе сбора в Java. Когда я нахожусь в хорошем состоянии, я узнаю исходный код класса коллекции Java. Я буду усердно работать, чтобы стать младшим программистом!
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.