Java程序搜索环形链表中的元素
什么是链表和环形链表?
链表是一种数据结构,其中每个节点包含两个部分,一个数据和一个地址路径。这些部分指向下一个节点,始终与前面的节点形成互连。基于此,环形链表是指最后一个节点与第一个节点互连,这就是此类链表被称为环形链表的原因。
在Java环境中,当我们在环形链表中搜索元素时,需要在链表中创建一个临时节点来指向。除此之外,我们还需要声明另外两个变量。它们是跟踪索引和跟踪搜索。如果Temp节点在起始点为空,那么遍历列表很重要,因为它此时不包含任何项。
环形链表如何工作及其应用?
环形链表的工作方法
对于环形链表,用户可以在该特定列表中的任何位置输入数据(在数组中,由于它是相邻内存,因此这是不可能的)。在此链表中,后向数据存储下一个节点的地址节点。这样,数据以循环方式相互指向,形成一个大小动态的循环链。这里的动态是指:内存分配将根据需要进行。
需要记住以下几点
任何节点都可以作为环形链表的起点
数据列表可以从任何随机节点遍历
这里没有指向第一个节点的指针
环形链表的应用
环形链表在我们个人电脑中使用,同时多个应用程序执行其任务。
用于创建循环队列。
在多人游戏中循环切换玩家。
用于Word或Photoshop应用程序中的撤消功能。
环形链表算法
环形链表的实现和操作方法非常简单。它有两个特征,数据和下一个。要定义另一个环形链表,我们可以使用:头和尾。新节点始终由“当前节点”定义,它将指向链表的头部。每次迭代后,指针将移动到下一个节点。
步骤1 - 根据给定值声明一个newNode()。
步骤2 - 搜索空列表。
步骤3 - 如果结果为空,则head = newNode()。
步骤4 - 否则,将节点指针定义为temp并初始化。
环形链表的语法
struct Node {int dataset; struct Node * to next;};
在此语法中,列表中的每个节点都具有数据和指针部分,以便在接收新输入时创建新节点。
我们可以使用以下方法在特定列表中搜索元素 -
通过将新数据添加到特定列表中
通过在特定环形链表中搜索元素
通过将新数据添加到特定链表中
将一些新元素添加到新节点有助于从环形链表中找出一些特定数据。首先,您需要将一个新节点插入分配的内存中。存储新数据后,您可以将下一个数据更改为新节点。您也可以在节点末尾存储其他数据并应用遍历。
示例
public class SearchNodearb {
public class Nodefind{
int datafall;
Nodefind next;
public Nodefind(int datafall) {
this.datafall = datafall;
}
}
public Nodefind head = null;
public Nodefind tail = null;
public void add(int datafall){
Nodefind newNode1 = new Nodefind(datafall);
if(head == null) {
head = newNode1;
tail = newNode1;
newNode1.next = head;
}
else {
tail.next = newNode1;
tail = newNode1;
tail.next = head;
}
}
public void search(int element) {
Nodefind current = head;
int i = 1;
boolean flagon = false;
if(head == null) {
System.out.println("List is totally Void! So Sad!");
}
else {
do{
if(current.datafall == element) {
flagon = true;
break;
}
current = current.next;
i++;
}while(current != head);
if(flagon)
System.out.println("Element is present in the list with a position tag : " + i);
else
System.out.println("Element is not present in the list");
}
}
public static void main(String[] args) {
SearchNodearb cl1 = new SearchNodearb();
cl1.add(1000);
cl1.add(5000);
cl1.add(3);
cl1.add(4);
cl1.search(2);
cl1.search(5000);
}
}
输出
Element is not present in the list Element is present in the list with a position tag: 2
通过在特定环形链表中搜索元素
首先,您需要初始化一个节点,然后计数器f=0。如果头的 position 为空,则整个列表为空。否则遍历整个列表。如果输出为零,则表示列表中未找到该元素。
示例
public class search {
class Nodeval {
int data;
Nodeval next;
public Nodeval(int data) { this.data = data; }
}
public Nodeval head = null;
public Nodeval tempo = null;
public void addNode2001(int data){
Nodeval new10 = new Nodeval(data);
if (head == null) {
head = new10;
}
else {
tempo.next = new10;
}
tempo = new10;
tempo.next = head;
}
public void find(int key){
Nodeval temp07 = head;
int f = 0;
if (head == null) {
System.out.println("List is empty, Please Fill It ASAP");
}
else {
do {
if (temp07.data == key) {
System.out.println(
"element is present in the running list");
f = 1;
break;
}
temp07 = temp07.next;
} while (temp07 != head);
if (f == 0) {
System.out.println(
"element is not present here, I am sorry!");
}
}
}
public static void main(String[] args){
search srdd = new search();
srdd.addNode2001(5);
srdd.addNode2001(4);
srdd.addNode2001(3);
srdd.addNode2001(2);
srdd.find(2);
srdd.find(6);
}
}
输出
element is present in the running list element is not present here, I am sorry!
结论
使用环形链表有很多优点和缺点。最重要的优点是可以从列表的任何节点开始操作以进行遍历。无需使用NULL,对于CPU轮询调度非常有用。但最大的缺点是,如果列表的编程不正确,它可能会变成无限循环,服务器可能会挂起。因此,通过本文,我们学习了如何使用Java在环形链表中搜索元素。
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP