programming-examples/java/Graph_Problems_Algorithms/Java Program to Implement Rope.java

316 lines
6.9 KiB
Java
Raw Normal View History

2019-11-15 12:59:38 +01:00
/*This is a Java Program to implement Rope. A rope is a data structure for storing and manipulating a very long string.*/
/**
* 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 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