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:
Giới thiệu java.io.tmpdir
Java Program to Implement Sorted Vector
Java Program to Implement Maximum Length Chain of Pairs
Guide to Java OutputStream
Hướng dẫn Java Design Pattern – Transfer Object
Spring MVC + Thymeleaf 3.0: New Features
Add Multiple Items to an Java ArrayList
Generating Random Numbers in a Range in Java
Spring Boot Tutorial – Bootstrap a Simple Application
Logout in an OAuth Secured Application
Java Program to Check whether Graph is a Bipartite using 2 Color Algorithm
Basic Authentication with the RestTemplate
Using Spring @ResponseStatus to Set HTTP Status Code
Java Program to Implement Sorting of Less than 100 Numbers in O(n) Complexity
Java Program to Implement Selection Sort
Java Program to Implement PriorityQueue API
Spring Boot Integration Testing with Embedded MongoDB
Java Program to Implement Dijkstra’s Algorithm using Queue
Java Program to Check whether Undirected Graph is Connected using DFS
Java Program to Implement Fermat Factorization Algorithm
Spring WebFlux Filters
Hướng dẫn Java Design Pattern – Mediator
An Intro to Spring Cloud Zookeeper
Java Program to Generate Random Numbers Using Probability Distribution Function
Java Program to Construct an Expression Tree for an Prefix Expression
Java Program to Implement Stein GCD Algorithm
Java – Reader to InputStream
Upload and Display Excel Files with Spring MVC
Cơ chế Upcasting và Downcasting trong java
Java Program to Implement Circular Singly Linked List
Java – Get Random Item/Element From a List
Hướng dẫn Java Design Pattern – Template Method