This is a Java Program to implement Rope. A rope is a data structure for storing and manipulating a very long string.
Here is the source code of the Java program to implement Rope. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/**
* Java Program to Implement Rope
**/
import java.util.Scanner;
/** Class RopeNode **/
class RopeNode
{
RopeNode left, right;
String data;
int weight;
/** Constructor **/
public RopeNode(String data)
{
this.data = data;
left = null;
right = null;
weight = data.length();
}
/** Constructor **/
public RopeNode()
{
data = null;
left = null;
right = null;
weight = 0;
}
}
/** Class Rope **/
class Rope
{
RopeNode root;
/** Constructor **/
public Rope()
{
root = new RopeNode("");
}
/** Function to clear rope **/
public void makeEmpty()
{
root = new RopeNode("");
}
/** Function to concat an element **/
public void concat(String str)
{
RopeNode nptr = new RopeNode(str);
RopeNode newRoot = new RopeNode();
newRoot.left = root;
newRoot.right = nptr;
newRoot.weight = newRoot.left.weight ;
if (newRoot.left.right != null)
newRoot.weight += newRoot.left.right.weight;
root = newRoot;
}
/** Function get character at a paricular index **/
public char indexAt(int ind)
{
RopeNode tmp = root;
if (ind > tmp.weight)
{
ind -= tmp.weight;
return tmp.right.data.charAt(ind);
}
while (ind < tmp.weight)
tmp = tmp.left;
ind -= tmp.weight;
return tmp.right.data.charAt(ind);
}
/** Function get substring between two indices **/
public String substring(int start, int end)
{
String str = "";
boolean found = false;
RopeNode tmp = root;
if (end > tmp.weight)
{
found = true;
end -= tmp.weight;
if (start > tmp.weight)
{
start -= tmp.weight;
str = tmp.right.data.substring(start, end);
return str;
}
else
str = tmp.right.data.substring(0, end);
}
if (!found)
{
while (end <= tmp.weight)
tmp = tmp.left;
end -= tmp.weight;
if (start >= tmp.weight)
{
start -= tmp.weight;
str = tmp.right.data.substring(start, end) + str;
return str;
}
str = tmp.right.data.substring(0, end);
}
tmp = tmp.left;
while (start < tmp.weight)
{
str = tmp.right.data + str;
tmp = tmp.left;
}
start -= tmp.weight;
str = tmp.right.data.substring(start) + str;
return str;
}
/** Function to print Rope **/
public void print()
{
print(root);
System.out.println();
}
private void print(RopeNode r)
{
if (r != null)
{
print(r.left);
if (r.data != null)
System.out.print(r.data);
print(r.right);
}
}
}
/** Class RopeTest **/
public class RopeTest
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
/** Creating object of Rope **/
Rope r = new Rope();
System.out.println("Rope Test\n");
char ch;
/** Perform rope operations **/
do
{
System.out.println("\nRope Operations\n");
System.out.println("1. concat ");
System.out.println("2. get character at index");
System.out.println("3. substring");
System.out.println("4. clear");
int choice = scan.nextInt();
switch (choice)
{
case 1 :
System.out.println("Enter string to concat");
r.concat( scan.next() );
break;
case 2 :
System.out.println("Enter index");
System.out.println("Character at index = "+ r.indexAt(scan.nextInt()));
break;
case 3 :
System.out.println("Enter integer start and end limit");
System.out.println("Substring : "+ r.substring( scan.nextInt(), scan.nextInt() ));
break;
case 4 :
System.out.println("\nRope Cleared\n");
r.makeEmpty();
break;
default :
System.out.println("Wrong Entry \n ");
break;
}
/** Display rope **/
System.out.print("\nRope : ");
r.print();
System.out.println("\nDo you want to continue (Type y or n) \n");
ch = scan.next().charAt(0);
} while (ch == 'Y'|| ch == 'y');
}
}
Rope Test Rope Operations 1. concat 2. get character at index 3. substring 4. clear 1 Enter string to concat rope Rope : rope Do you want to continue (Type y or n) y Rope Operations 1. concat 2. get character at index 3. substring 4. clear 1 Enter string to concat is Rope : ropeis Do you want to continue (Type y or n) y Rope Operations 1. concat 2. get character at index 3. substring 4. clear 1 Enter string to concat a Rope : ropeisa Do you want to continue (Type y or n) y Rope Operations 1. concat 2. get character at index 3. substring 4. clear 1 Enter string to concat datastructure Rope : ropeisadatastructure Do you want to continue (Type y or n) y Rope Operations 1. concat 2. get character at index 3. substring 4. clear 2 Enter index 5 Character at index = s Rope : ropeisadatastructure Do you want to continue (Type y or n) y Rope Operations 1. concat 2. get character at index 3. substring 4. clear 2 Enter index 13 Character at index = r Rope : ropeisadatastructure Do you want to continue (Type y or n) y Rope Operations 1. concat 2. get character at index 3. substring 4. clear 3 Enter integer start and end limit 5 15 Substring : sadatastru Rope : ropeisadatastructure Do you want to continue (Type y or n) y Rope Operations 1. concat 2. get character at index 3. substring 4. clear 4 Rope Cleared Rope : Do you want to continue (Type y or n) n
Related posts:
Spring MVC Custom Validation
Hướng dẫn Java Design Pattern – Iterator
Java 8 Predicate Chain
Java Program to Implement HashSet API
Java Program to Implement Hash Tables with Double Hashing
Guide to Mustache with Spring Boot
Xử lý ngoại lệ trong Java (Exception Handling)
Java Program to Find Number of Spanning Trees in a Complete Bipartite Graph
Java Program to Implement Caesar Cypher
Performance Difference Between save() and saveAll() in Spring Data
Testing an OAuth Secured API with Spring MVC
Java Program to Generate N Number of Passwords of Length M Each
Adding Shutdown Hooks for JVM Applications
Handling Errors in Spring WebFlux
A Guide to WatchService in Java NIO2
Concurrent Test Execution in Spring 5
Java Program to Implement the Vigenere Cypher
Một số nguyên tắc, định luật trong lập trình
Custom Exception trong Java
Java Program to implement Priority Queue
Java Program to Create a Minimal Set of All Edges Whose Addition will Convert it to a Strongly Conne...
Logging a Reactive Sequence
Toán tử instanceof trong java
Java InputStream to String
How to Iterate Over a Stream With Indices
A Guide to the ResourceBundle
So sánh ArrayList và Vector trong Java
Từ khóa throw và throws trong Java
The Registration API becomes RESTful
Spring Boot - CORS Support
Spring Data Java 8 Support
The Dining Philosophers Problem in Java