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:
Java Program to Implement Network Flow Problem
Spring Security Login Page with React
Hướng dẫn Java Design Pattern – Visitor
Using a Spring Cloud App Starter
Java Program to implement Bit Set
A Quick JUnit vs TestNG Comparison
RestTemplate Post Request with JSON
Quick Guide to Spring Bean Scopes
Java Program to Implement Flood Fill Algorithm
Guide to Java Instrumentation
Tiêu chuẩn coding trong Java (Coding Standards)
Java Program to Find Nearest Neighbor Using Linear Search
Getting a File’s Mime Type in Java
Spring Boot Gradle Plugin
How to Store Duplicate Keys in a Map in Java?
Java Program to Implement the Schonhage-Strassen Algorithm for Multiplication of Two Numbers
Java Program to Implement HashTable API
Check If a File or Directory Exists in Java
Mapping Nested Values with Jackson
Java Program to Check Whether it is Weakly Connected or Strongly Connected for a Directed Graph
Receive email using POP3
Handling URL Encoded Form Data in Spring REST
HttpClient with SSL
Phương thức tham chiếu trong Java 8 – Method References
HttpClient 4 – Send Custom Cookie
Serve Static Resources with Spring
Java Program to Implement an Algorithm to Find the Global min Cut in a Graph
Flattening Nested Collections in Java
Comparing Two HashMaps in Java
Java Program to Implement Branch and Bound Method to Perform a Combinatorial Search
Java Program to Find kth Smallest Element by the Method of Partitioning the Array
Java Program to Generate a Sequence of N Characters for a Given Specific Case