The document describes an index of programs related to advanced data structures implemented by Antonita Shilpa. J at the United Institute of Technology. The index includes 15 programs covering topics such as graph search, breadth first search, depth first search, Dijkstra's shortest path algorithm, topological sorting, hill climbing, merge sort, quick sort, producer consumer problem, concurrency lists, stacks and queues, dynamic programming, randomized algorithms, and the dining philosopher's problem. For each topic, it provides the algorithm, Java code implementation and sample output.
The document describes an index of programs related to advanced data structures implemented by Antonita Shilpa. J at the United Institute of Technology. The index includes 15 programs covering topics such as graph search, breadth first search, depth first search, Dijkstra's shortest path algorithm, topological sorting, hill climbing, merge sort, quick sort, producer consumer problem, concurrency lists, stacks and queues, dynamic programming, randomized algorithms, and the dining philosopher's problem. For each topic, it provides the algorithm, Java code implementation and sample output.
Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 1
INDEX S. No. PROGRAM Page No. 1 Graph Search 2 2 Breadth First Search 5 3 Depth First Search 8 4 Dijikstras Shortest Path Algorithm 12 5 Topological Sorting 18 6 Hill Climbing 22 7 Merge Sort 28 8 Quick Sort 33 9 Producer Consumer 36 10 Concurrency List 39 11 Concurrency Stack 44 12 Concurrency Queue 49 13 Dynamic Programming 54 14 Randomized Algorithm 58 15 Dining Philosophers Problem 61 U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 2
GRAPH SEARCH ALGORITHM: Step 1: Start Step 2: Get an input graph, source node S, node to search N Step 3: Add S to notHandled queue Step 4: Take first node, U from notHandled Step 4.1: If U is equal to N Step 4.1.1: Return <Handled, notHandled> Step 4.2: Else Step 4.2.1: Add the child of U to notHandled Step 4.2.2: Move U from notHandled to Handled queue Step 5: Repeat step 4 till notHandled is not empty Step 6: Return <Handled, notHandled> Step 7: End the Algorithm
JAVA CODE import java.util.*; public class GraphSearch { public static void main(String[] arg) { ArrayList<String> start = new ArrayList<String>(); ArrayList<String> end = new ArrayList<String>(); ArrayList<String> nodes = new ArrayList<String>(); ArrayList<String> notHandled = new ArrayList<String>(); ArrayList<String> handled = new ArrayList<String>(); int edgeCount, i, hSize, nSize; String node; Scanner s= new Scanner(System.in); System.out.println( "NOTE: The first node will be taken as source"); System.out.println( "Enter the number of edges:"); edgeCount=s.nextInt(); for(i=0; i<edgeCount;i++) { U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 3
// get FROM node and TO node for each edge System.out.println( "Enter the FROM node:"); start.add(s.next()); System.out.println( "Enter the TO node:"); end.add(s.next()); while(start.get(i).equalsIgnoreCase(end.get(i))) { end.remove(i); System.out.println( "Error: SAME AS START NODE"); System.out.println( "Enter the TO node:"); end.add(s.next()); } if(!(nodes.contains(start.get(i)))) nodes.add(start.get(i)); if(!(nodes.contains(end.get(i)))) nodes.add(end.get(i)); } nSize=nodes.size(); System.out.println( "Enter the node to be found:"); node=s.next(); notHandled.add(start.get(0)); // root node handled.add(notHandled.get(0)); if(node.equalsIgnoreCase(notHandled.get(0))) hSize=nSize; else hSize=handled.size(); nodes.remove(notHandled.get(0)); notHandled.remove(0);
// till all nodes are handled while(hSize<nSize) {
// for the rear node in handled queue, add its children in notHandled queue for(i=0; i<start.size(); i++) if(handled.get(hSize-1).equalsIgnoreCase(start.get(i))) if(!(notHandled.contains(end.get(i))) && !(handled.contains(end.get(i)))) notHandled.add(end.get(i));
//remove the front node from notHandled and add it to the handled queue if(!(handled.contains(notHandled.get(0))) && !(notHandled.get(0).equalsIgnoreCase(node))) handled.add(notHandled.get(0)); if(node.equalsIgnoreCase(notHandled.get(0))) hSize=nSize; else hSize=handled.size(); nodes.remove(notHandled.get(0)); notHandled.remove(0); } System.out.println(" "); System.out.println("Nodes Handled = "+handled); System.out.println("Node "+ node +" Found !!! "); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 4
a b c e d System.out.println("Nodes Not Handled = "+nodes); } }
GRAPH
OUTPUT NOTE: The first node will be taken as source Enter the number of edges: 4 Enter the FROM node: a Enter the TO node: b Enter the FROM node: a Enter the TO node: c Enter the FROM node: b Enter the TO node: d Enter the FROM node: b Enter the TO node: e Enter the node to be found: c
Nodes Handled = [a, b] Node c Found !!! Nodes Not Handled = [d, e]
RESULT Thus the code in written in Java and executed for finding a node in a graph. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 5
BREADTH FIRST SEARCH ALGORITHM: Step 1: Start Step 2: Get an input graph G, source node S Step 3: Add S to notHandled queue Step 4: Take first node, U from notHandled Step 4.1: Add the child of U to notHandled Step 4.2: Move U from notHandled to Handled queue Step 5: Repeat step 4 till notHandled is not empty Step 6: Return <Handled, notHandled> Step 7: End the Algorithm
JAVA CODE import java.util.*; public class BreadthFirstSearch { public static void main(String[] arg) { ArrayList<String> start = new ArrayList<String>(); ArrayList<String> end = new ArrayList<String>(); ArrayList<String> nodes = new ArrayList<String>(); ArrayList<String> notHandled = new ArrayList<String>(); ArrayList<String> handled = new ArrayList<String>(); int edgeCount, i, hSize;
Scanner s= new Scanner(System.in); System.out.println( "NOTE: The first node will be taken as source"); System.out.println( "Enter the number of edges:"); edgeCount=s.nextInt(); for(i=0; i<edgeCount;i++) { // get FROM node and TO node for each edge System.out.println( "Enter the FROM node:"); start.add(s.next()); System.out.println( "Enter the TO node:"); end.add(s.next()); while(start.get(i).equalsIgnoreCase(end.get(i))) { end.remove(i); System.out.println( "Error: SAME AS START NODE"); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 6
System.out.println( "Enter the TO node:"); end.add(s.next()); } if(!(nodes.contains(start.get(i)))) nodes.add(start.get(i)); if(!(nodes.contains(end.get(i)))) nodes.add(end.get(i)); } notHandled.add(start.get(0)); // root node System.out.println("Handled Not Handled"); System.out.println("[] "+ notHandled); handled.add(notHandled.get(0)); hSize=handled.size(); // till all nodes are handled while(notHandled.size()>0) { notHandled.remove(0); // for the rear node in handled queue, add its children in notHandled queue for(i=0; i<edgeCount; i++) if(handled.get(hSize-1).equalsIgnoreCase(start.get(i))) if(!(notHandled.contains(end.get(i))) && !(handled.contains(end.get(i)))) notHandled.add(end.get(i)); System.out.println(handled +" "+ notHandled); //remove the front node from notHandled and add it to the handled queue if(notHandled.size()>0) if(!(handled.contains(notHandled.get(0)))) handled.add(notHandled.get(0)); hSize=handled.size(); } System.out.println("All Nodes are traversed in BFS"); } } GRAPH
OUTPUT NOTE: The first node will be taken as source Enter the number of edges: 4 Enter the FROM node: a Enter the TO node: b
a b d e c U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 7
Enter the FROM node: b Enter the TO node: c Enter the FROM node: a Enter the TO node: d Enter the FROM node: d Enter the TO node: e Handled Not Handled [] [a] [a] [b, d] [a, b] [d, c] [a, b, d] [c, e] [a, b, d, c] [e] [a, b, d, c, e] [] All Nodes are traversed in BFS
RESULT Thus the code is written in Java and executed for implementing Breadth First Search. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 8
DEPTH FIRST SEARCH ALGORITHM: Step 1: Start Step 2: Get an input graph G, source node S Step 3: Push S to notHandled stack Step 4: Pop top node, U from notHandled Step 4.1: Push the child of U to notHandled Step 4.2: Pop U from notHandled stack and add to Handled queue Step 5: Repeat step 4 till notHandled is not empty Step 6: Return <Handled, notHandled> Step 7: End the Algorithm
JAVA CODE import java.util.*; public class DepthFirstSearch { static ArrayList<String> start = new ArrayList<String>(); static ArrayList<String> end = new ArrayList<String>(); static String[] stack = new String[10]; static ArrayList<String> handled = new ArrayList<String>(); static ArrayList<String> notHandled = new ArrayList<String>(); static ArrayList<String> child = new ArrayList<String>(); static int edgeCount,top=-1; public static void main(String[] arg) { Scanner s= new Scanner(System.in); System.out.println( "NOTE: The first node is assumed as ROOT"); System.out.println( "Enter the number of edges:"); edgeCount=s.nextInt(); for(int i=0; i<edgeCount;i++) { // get FROM node and TO node for each edge System.out.println( "Enter the FROM node:"); start.add(s.next()); System.out.println( "Enter the TO node:"); end.add(s.next()); while(start.get(i).equalsIgnoreCase(end.get(i))) U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 9
{ end.remove(i); System.out.println( "Error: SAME AS START NODE"); System.out.println( "Enter the TO node:"); end.add(s.next()); } } System.out.println("Handled STACK"); check(start.get(0)); printStack(); System.out.println("All Nodes are traversed in DFS"); }
static void cSort() { //since the child nodes are inserted in reverse order, reverse it for(int q=child.size();q>0;q--) push(child.get(q-1)); }
static void pop() { //move the top node from notHandled to handled if(top>-1) { handled.add(stack[top]); notHandled.remove(stack[top]); top--; } }
static void check(String node) { // insert the parent node in notHandled node push(node); printStack(); int flag=1; for(int q=0; q<start.size();q++) if(start.get(q).equalsIgnoreCase(node)) { //the child nodes for top of stack if any if(flag==1) { U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 10
a b c e d pop(); flag=0; } //since they are not arranged, use child array ad temp array child.add(end.get(q)); } //sort the child of current top of stack cSort(); if(flag==1) // if no child nodes, then pop the top of stack pop(); if(top>-1) //recurse the check function with new top of stack check(stack[top]); }
static void printStack() { //print the notHandled node in reverse order, since its stack ArrayList<String> sort = new ArrayList<String>(); for(int q=notHandled.size();q>0;q--) sort.add(notHandled.get(q-1)); System.out.println(handled+" "+sort); } } GRAPH
OUTPUT NOTE: The first node is assumed as ROOT Enter the number of edges: 4 Enter the FROM node: a Enter the TO node: b Enter the FROM node: a Enter the TO node: c Enter the FROM node: b Enter the TO node: e Enter the FROM node: c Enter the TO node: d Handled STACK U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 11
[] [a] [a] [b, c] [a, b] [e, c] [a, b, e] [c] [a, b, e, c] [d] [a, b, e, c, d] [] All Nodes are traversed in DFS
RESULT Thus the code is written in Java and executed for implementing Depth First Search. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 12
DIJIKSTRAS SHORTEST PATH ALGORITHM: Step 1: Start Step 2: Get an input graph G, source node S with cost of each edge c <u, v> Step 3: Assign path of each node as NIL Step 4: Assign distance of each node except S as INFINITY Step 5: Assign distance of S as 0 Step 6: Add S to notHandled Step 7: Sort the nodes based on the distance Step 8: Choose the node U, with minimum distance Step 8.1: Add all children of U to notHandled Step 8.2: For all the child nodes of U Step 8.2.1: Assign path as node U Step 8.2.2: If distance of current node greater than d(U) + c <u, v> Step 8.2.2.1: Assign distance as d(U) + c <u, v> Step 8.3: Move U from notHandled to Handled Step 9: Go to step 7 if notHandled is not empty Step 10: End Algorithm
JAVA CODE import java.util.*;
public class ShortestPath_Dijikstra { static ArrayList<String> start = new ArrayList<String>(); static ArrayList<String> end = new ArrayList<String>(); static ArrayList<Integer> cost = new ArrayList<Integer>(); static ArrayList<String> nodes = new ArrayList<String>(); static String[] path = new String[20]; static int[] length = new int[20]; U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 13
static ArrayList<String> handled = new ArrayList<String>(); static ArrayList<String> notHandled = new ArrayList<String>(); static int edgeCount;
public static void main(String[] arg) { int node, i; Scanner s= new Scanner(System.in); // Get start node, end node, cost of each edge from user System.out.println( "NOTE: The first node will be taken as source"); System.out.println( "Enter the number of edges:"); edgeCount=s.nextInt(); for(i=0; i<edgeCount;i++) { System.out.println( "Enter the FROM node:"); start.add(s.next()); System.out.println( "Enter the TO node:"); end.add(s.next()); while(start.get(i).equalsIgnoreCase(end.get(i))) { end.remove(i); System.out.println( "Error: SAME AS START NODE"); System.out.println( "Enter the TO node:"); end.add(s.next()); } System.out.println( "Enter the cost of edge:"); cost.add(s.nextInt()); if(!(nodes.contains(start.get(i)))) nodes.add(start.get(i)); if(!(nodes.contains(end.get(i)))) nodes.add(end.get(i)); } System.out.println("No. of nodes="+nodes.size()); //Initialising table values for(i=0;i<nodes.size();i++) if(i==0) { // for ROOT/SOURCE node notHandled.add(nodes.get(i)); length[i]=0; path[i]="NIL"; } else // other nodes in the graph length[i]=1000; System.out.println("NODE KNOWN LENGTH PATH"); print(); for(i=0;i<nodes.size();i++) { node=findMinimum(); findChild(node); System.out.println("NODE KNOWN LENGTH PATH"); print(); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 14
System.out.println(" "); notHandled.clear(); handled.add(nodes.get(node)); } System.out.println("NODE KNOWN LENGTH PATH"); print(); System.out.println(""); } static int findMinimum() { int cost=1000; int node=0; for(int k=0; k<nodes.size(); k++) if(cost>length[k] && !(handled.contains(nodes.get(k)))) { cost=length[k]; node=k; } return node; }
static int known(int index) { if(handled.contains(nodes.get(index))) return 1; else U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 15
3 5 7 2 6 4 p q r t s return 0; }
}
GRAPH
OUTPUT NOTE: The first node will be taken as source Enter the number of edges: 6 Enter the FROM node: p Enter the TO node: q Enter the cost of edge: 5 Enter the FROM node: p Enter the TO node: r Enter the cost of edge: 4 Enter the FROM node: q Enter the TO node: s Enter the cost of edge: 5 Enter the FROM node: q Enter the TO node: t Enter the cost of edge: 3 Enter the FROM node: r U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 16
Enter the TO node: s Enter the cost of edge: 2 Enter the FROM node: r Enter the TO node: t Enter the cost of edge: 6 No. of nodes=5
NODE KNOWN LENGTH PATH p 0 0 NIL q 0 1000 null r 0 1000 null s 0 1000 null t 0 1000 null
NODE KNOWN LENGTH PATH p 0 0 NIL q 0 5 p r 0 4 p s 0 1000 null t 0 1000 null
NODE KNOWN LENGTH PATH p 1 0 NIL q 0 5 p r 0 4 p s 0 6 r t 0 10 r
NODE KNOWN LENGTH PATH p 1 0 NIL q 0 5 p r 1 4 p s 0 6 r t 0 8 q
NODE KNOWN LENGTH PATH p 1 0 NIL q 1 5 p r 1 4 p s 0 6 r t 0 8 q
NODE KNOWN LENGTH PATH p 1 0 NIL q 1 5 p r 1 4 p s 1 6 r t 0 8 q U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 17
NODE KNOWN LENGTH PATH p 1 0 NIL q 1 5 p r 1 4 p s 1 6 r t 1 8 q
RESULT Thus the code is written in Java and executed for implementing Dijikstras Shortest Path Algorithm. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 18
TOPOLOGICAL SORT ALGORITHM: Step 1: Start Step 2: Get an input graph G Step 3: Find the in-degree of each node in graph G Step 4: Sort the nodes with respect to their in-degrees Step 5: Remove the node with in-degree 0 from graph Step 6: Add the node to Handled queue Step 7: Go to step 3 if graph is not empty Step 8: Return Handled Step 9: End Algorithm
JAVA CODE package Graph; import java.util.*;
public class TopologicalSort { static ArrayList<String> start = new ArrayList<String>(); static ArrayList<String> end = new ArrayList<String>(); static ArrayList<String> nodes = new ArrayList<String>(); static int[] indegree = new int[20]; static ArrayList<String> handled = new ArrayList<String>(); static int edgeCount, i, nodeSize, k, j, count, pNodeSize; static boolean flag=true;
public static void main(String[] arg) { int min; Scanner s= new Scanner(System.in); System.out.println( "NOTE: The first node will be taken as source"); System.out.println( "Enter the number of edges:"); edgeCount=s.nextInt(); for(i=0; i<edgeCount;i++) { // get FROM node and TO node for each edge System.out.println( "Enter the FROM node:"); start.add(s.next()); System.out.println( "Enter the TO node:"); end.add(s.next()); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 19
while(start.get(i).equalsIgnoreCase(end.get(i))) { end.remove(i);//to remove node added before checking error System.out.println( "Error: SAME AS START NODE"); System.out.println( "Enter the TO node:"); end.add(s.next()); } if(!(nodes.contains(start.get(i)))) nodes.add(start.get(i)); if(!(nodes.contains(end.get(i)))) nodes.add(end.get(i)); } nodeSize=nodes.size(); for(k=0;k<nodeSize;k++) { if(flag) { pNodeSize=nodes.size(); inDegree(); if(check()) { min=minDegree(); if(!(handled.contains(nodes.get(min)))) { handled.add(nodes.get(min)); } nodes.remove(min); System.out.println(" "); System.out.println( "Sorted queue "+handled); System.out.println("-----------------------------------"); System.out.println(" "); } else { System.out.println("The graph is cyclic and hence cant be sorted"); flag=false; } } } }
static void inDegree() { for(i=0;i<pNodeSize;i++) { count=0; for(j=0;j<edgeCount;j++) { if(nodes.get(i).equalsIgnoreCase(end.get(j)) && !(handled.contains(start.get(j)))) count++; } indegree[i]=count; System.out.println( "indegree of "+nodes.get(i)+" is "+count); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 20
a e b c d } }
static int minDegree() { int min=indegree[0],index=0; for(i=0;i<pNodeSize;i++) { if(min>indegree[i]) { min=indegree[i]; index=i; } } return index; }
OUTPUT NOTE: The first node will be taken as source Enter the number of edges: 5 Enter the FROM node: a Enter the TO node: b Enter the FROM node: b Enter the TO node: c Enter the FROM node: U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 21
c Enter the TO node: d Enter the FROM node: c Enter the TO node: e Enter the FROM node: a Enter the TO node: d
indegree of a is 0 indegree of b is 1 indegree of c is 1 indegree of d is 2 indegree of e is 1
RESULT Thus the code is written in Java and executed for implementing Topological sorting. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 22
HILL CIMBING ALGORITHM: Step 1: Start Step 2: Get an input graph G, source node S, destination node D with flow_capacity of each edge, rate of flow Step 3: Find the various paths from source and destination Step 4: Select a path from set of path Step 4.1: Find min_cut of selected path Step 4.2: Netflow is the sum of min_cut of all paths Step 5: If the netFlow > rate of flow then Step 5.1: Select a path from set of path Step 5.2: Find min_cut of selected path Step 5.3: For each edge of the path Step 5.3.1: Calculate flow_capacity min_cut Step 5.3.2: Assign the result to flow_capacity of the edge Step 5.3.3: Calculate and assign netFlow = netFlow min_cut Step 5.4: Goto Step 5.1 if netFlow > 0 Step 5.5: Else Return the flow through each edge of the graph Step 6: Else Exit Step 7: End Algorithm
JAVA CODE import java.util.*; public class HillClimbing { static ArrayList<String> start = new ArrayList<String>(); static ArrayList<String> end = new ArrayList<String>(); static ArrayList<String> nodes = new ArrayList<String>(); static ArrayList<Integer> capacity = new ArrayList<Integer>(); static ArrayList<String> stack = new ArrayList<String>(); static int []flow = new int[20]; U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 23
static String dest,source; static int edgeCount,i,j,netFlow,flag=0,top,netCapacity=0,capa; public static void main(String[] arg) { Scanner s= new Scanner(System.in); System.out.println( "Enter the number of edges:"); edgeCount=s.nextInt(); for(i=0; i<edgeCount;i++) { System.out.println( "Enter the FROM node:"); start.add(s.next()); System.out.println( "Enter the TO node:"); end.add(s.next()); while(start.get(i).equalsIgnoreCase(end.get(i))) { end.remove(i); System.out.println( "Error: SAME AS START NODE"); System.out.println( "Enter the TO node:"); end.add(s.next()); } System.out.println( "Enter the capacity of the edge:"); capa=s.nextInt(); capacity.add(capa); flow[i]=capa; } capa=0; System.out.println( "Enter the Source Node "); source=s.next(); System.out.println( "Enter the Destination Node "); dest=s.next(); System.out.println( "Enter the Flow/Rate of the network "); netFlow=s.nextInt(); findPath(source); stack.clear(); flag=1; findPath(source); print(); check(); }
static void findPath(String node) { ArrayList<String> queue = new ArrayList<String>(); stack.add(node); for(i=0;i<edgeCount;i++) if(start.get(i).equalsIgnoreCase(node)) if(!stack.contains(end.get(i))) { if(end.get(i).equalsIgnoreCase(dest)) { stack.add(end.get(i)); pathCapacity(stack); stack.remove(stack.size()-1); } U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
if(flag==0) netCapacity=netCapacity+min; else { if(netFlow>min) { netFlow=netFlow-min; capa=capa+min; System.out.println("Flow along the PATH "+stack+" with FLOW "+min); for(int q=0;q<edges.size();q++) { int index=edges .get(q); flow[index]=flow[index]-min; } } else { capa=capa+netFlow; System.out.println("Flow along the PATH "+stack+" with FLOW " +netFlow); for(int q=0;q<edges.size();q++) { int index=edges .get(q); flow[index]=flow[index]-netFlow; } netFlow=0; U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 25
8 16 7 12 42 17 15 10 b 13 a e c d t s }
} }
static void check() { if(netFlow>0) { System.out.println("The Maximum flow of the network is "+capa); System.out.println("The requested flow cant be accomodated.."+netFlow); } }
static void print() { System.out.println(" "); for(j=0;j<edgeCount;j++) { System.out.println("Flow across the edge "+start.get(j)+" "+end.get(j)+" is : "+ (capacity.get(j)-flow[j])+"/"+capacity.get(j)); } } }
GRAPH
OUTPUT Enter the number of edges: 9 Enter the FROM node: s Enter the TO node: a Enter the capacity of the edge: 10 Enter the FROM node: s Enter the TO node: d Enter the capacity of the edge: 13 U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 26
Enter the FROM node: s Enter the TO node: c Enter the capacity of the edge: 12 Enter the FROM node: d Enter the TO node: e Enter the capacity of the edge: 16 Enter the FROM node: d Enter the TO node: b Enter the capacity of the edge: 7 Enter the FROM node: a Enter the TO node: b Enter the capacity of the edge: 15 Enter the FROM node: e Enter the TO node: c Enter the capacity of the edge: 8 Enter the FROM node: b Enter the TO node: c Enter the capacity of the edge: 17 Enter the FROM node: c Enter the TO node: t Enter the capacity of the edge: 42 Enter the Source Node s Enter the Destination Node t Enter the Flow/Rate of the network 35 Flow along the PATH [s, a, b, c, t] with FLOW 10 Flow along the PATH [s, d, e, c, t] with FLOW 8 Flow along the PATH [s, d, b, c, t] with FLOW 5 Flow along the PATH [s, c, t] with FLOW 12
Flow across the edge s - a is : 10/10 U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 27
Flow across the edge s - d is : 13/13 Flow across the edge s - c is : 12/12 Flow across the edge d - e is : 8/16 Flow across the edge d - b is : 5/7 Flow across the edge a - b is : 10/15 Flow across the edge e - c is : 8/8 Flow across the edge b - c is : 15/17 Flow across the edge c - t is : 35/42
RESULT Thus the code is written in Java and executed for implementing Hill Climbing. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 28
MERGE SORT ALGORITHM: Step 1: Start Step 2: Get n inputs elements Step 3: If the number of elements >2 then Step 3.1: Split the elements into 2 halves, right and left using the index of the element Step 3.2: Recurse the Step 3 with right array Step 3.3: Recurse the Step 3 with left array Step 3.4: Call merge function Step 4: Else if the number of elements ==2 then Step 4.1: Add first element to right array n second element to left array Step 4.2: Call the merge function Step 5: In the merge function Step 5.1: Compare each element of the right and left array Step 5.2: Add the sorted list to a global array Step 6: End Algorithm
JAVA CODE import java.util.*;
public class MergeSort { static int n,i; static ArrayList<Integer> element = new ArrayList<Integer>(); static ArrayList<Integer> sorted = new ArrayList<Integer>(); public static void main(String[] arg) { Scanner s= new Scanner(System.in); System.out.println( "NOTE: Duplicate terms will be removed"); System.out.println( "Enter the number of elements to be sorted:"); n=s.nextInt(); for(i=0;i<n;i++) { System.out.println( "Enter the element "+(i+1)+" :"); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 29
element.add(s.nextInt()); } splitting(element); System.out.println(" "); System.out.println("Sorted List of given List is : "+sorted); }
static void splitting(ArrayList<Integer> entire) { int size=entire.size()/2; ArrayList<Integer> right = new ArrayList<Integer>(); ArrayList<Integer> left = new ArrayList<Integer>(); // if n>2 then recurse if(entire.size()>2) { //divide into 2 for(i=0;i<entire.size();i++) if(i<size) right.add(entire.get(i)); else left.add(entire.get(i)); splitting(right); splitting(left); merging(right,left); } if(entire.size()==2) { right.add(entire.get(0)); left.add(entire.get(1)); merging(right,left); } }
static void merging(ArrayList<Integer> right,ArrayList<Integer> left) { ArrayList<Integer> merged = new ArrayList<Integer>(); int rs=right.size(),ls=left.size(),x=0,y=0,z=0,ss=sorted.size(); int sum=rs+ls+ss; i=0; System.out.println("Left : "+left); System.out.println("Previously Sorted : "+sorted); System.out.println("Right : "+right);
while(i<(sum)) { if(rs>x && ls==y && ss==z)//only right { if(!merged.contains(right.get(x))) merged.add(right.get(x)); x++; i++; } else if(ls>y && rs==x && ss==z)//only left { U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 30
if(!merged.contains(left.get(y))) merged.add(left.get(y)); y++; i++; } else if(ls==y && rs==x && ss>z)//only sort { if(!merged.contains(sorted.get(z))) merged.add(sorted.get(z)); z++; i++; } else if(ls>y && rs==x && ss>z)//left n sort { if(left.get(y)<sorted.get(z)) { if(!merged.contains(left.get(y))) merged.add(left.get(y)); y++; i++; } else { if(!merged.contains(sorted.get(z))) merged.add(sorted.get(z)); z++; i++; } } else if(ls==y && rs>x && ss>z)//right n sort { if(right.get(x)<sorted.get(z)) { if(!merged.contains(right.get(x))) merged.add(right.get(x)); x++; i++; } else { if(!merged.contains(sorted.get(z))) merged.add(sorted.get(z)); z++; i++; } } else if(ls>y && rs>x && ss==z)//right n left { if(right.get(x)<left.get(y)) { if(!merged.contains(right.get(x))) merged.add(right.get(x)); x++; i++; U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
} else { if(right.get(x)<sorted.get(z)) { if(!merged.contains(right.get(x))) merged.add(right.get(x)); y++; i++; } else { if(!merged.contains(sorted.get(z))) merged.add(sorted.get(z)); z++; i++; } } } else { System.out.println("Error........."); } } System.out.println("-----------------------------"); System.out.println("Locally Merged Sorted List : "+merged); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 32
System.out.println(" "); sorted=merged; } }
OUTPUT NOTE: Duplicate terms will be removed Enter the number of elements to be sorted: 5 Enter the element 1 : 1 Enter the element 2 : 3 Enter the element 3 : 5 Enter the element 4 : 2 Enter the element 5 : 4 Left : [3] Previously Sorted : [] Right : [1] ----------------------------- Locally Merged Sorted List : [1, 3]
Left : [4] Previously Sorted : [1, 3] Right : [2] ----------------------------- Locally Merged Sorted List : [1, 2, 3]
Left : [2, 4] Previously Sorted : [1, 2, 3] Right : [5] ----------------------------- Locally Merged Sorted List : [1, 2, 3, 4, 5]
Left : [5, 2, 4] Previously Sorted : [1, 2, 3, 4, 5] Right : [1, 3] ----------------------------- Locally Merged Sorted List : [1, 2, 3, 4, 5]
Sorted List of given List is : [1, 2, 3, 4, 5]
RESULT Thus the code is written in Java and executed for implementing Merge Sort. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 33
QUICK SORT ALGORITHM: Step 1: Start Step 2: Get n elements to be sorted Step 3: If element size>2 Step 3.1: Find the average of n elements, pivot Step 3.2: if element lesser than pivot Step 3.2.1: Add element to lesser queue Step 3.2.2: Recurse step 3 with lesser queue Step 3.3: else Step 3.3.1: Add element to bigger queue Step 3.3.2: Recurse step 3 with bigger queue Step 4: else Step 4.1: if element[0] < element[1] Step 4.1.1: Swap elements Step 4.1.2: Join lesser and bigger list continuously Step 6: End Algorithm
JAVA CODE import java.util.*; public class QuickSort { static int n,i; static ArrayList<Integer> element = new ArrayList<Integer>(); static ArrayList<Integer> sorted = new ArrayList<Integer>(); public static void main(String[] arg) { Scanner s= new Scanner(System.in); //get elements System.out.println( "Enter the number of elements to be sorted:"); n=s.nextInt(); for(i=0;i<n;i++) { U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 34
System.out.println( "Enter the element "+(i+1)+" :"); element.add(s.nextInt()); } if(n>1) { System.out.println("Pivot -- Smaller -- Larger"); quickSort(element); System.out.println("Sorted list : "+sorted); } else { System.out.println("List is : "+element); } }
static void quickSort(ArrayList<Integer> entire) { int sum=0,pivot=0; ArrayList<Integer> smaller = new ArrayList<Integer>(); ArrayList<Integer> higher = new ArrayList<Integer>(); // if n>2 then recurse if(entire.size()>2) { //find pivot element for(i=0;i<entire.size();i++) sum=sum+entire.get(i); pivot=sum/entire.size(); //divide into 2 for(i=0;i<entire.size();i++) if(entire.get(i)>pivot) higher.add(entire.get(i)); else smaller.add(entire.get(i)); System.out.println(" "+pivot+" "+smaller+" "+higher); quickSort(smaller); quickSort(higher);
} //else sort and merge else { if(entire.size()==2) { pivot=(entire.get(0)+entire.get(1))/2; if(entire.get(0)<entire.get(1)) { sorted.add(entire.get(0)); sorted.add(entire.get(1)); } else { sorted.add(entire.get(1)); sorted.add(entire.get(0)); } U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
} } } OUTPUT Enter the number of elements to be sorted: 5 Enter the element 1 : 46 Enter the element 2 : 25 Enter the element 3 : 47 Enter the element 4 : 36 Enter the element 5 : 12 Pivot -- Smaller -- Larger 33 [25, 12] [46, 47, 36] 18 [25] [12] 43 [36] [46, 47] 46 [46] [47] Sorted list : [12, 25, 36, 46, 47]
RESULT Thus the code is written in Java and executed for implementing Merge Sort. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 36
PRODUCER CONSUMER ALGORITHM: Step 1: Start Step 2: Get choice Step 3: If choice is to produce Step 3.1: Get the amount to be produced Step 3.2: Add the amount to total amount Step 4: Else if choice is to consume Step 4.1: Get the amount to be consumed Step 4.2: Subtract the amount from total amount Step 5: Else Step 5.1: Exit Step 6: If total amount > threshold Step 7: Exit Step 8: End Algorithm
JAVA CODE import java.util.*; public class ProducerConsumer { static int amount=0, currAmt; static boolean flag=true; static String choice; public static void main(String[] arg) { Scanner s=new Scanner(System.in); System.out.println( "If u want to produce enter p/P"); System.out.println( "If u want to consume enter c/C"); System.out.println( "Others if u want to exit"); while(flag) { System.out.println( "Enter your Choice.."); System.out.println( "Amount present in warehouse = "+amount); choice=s.next(); if(choice.equalsIgnoreCase("p")) U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 37
{ System.out.println( "What quantity do u want to produce?"); currAmt=s.nextInt(); amount=amount+currAmt; if(amount>500)flag=false; } else if(choice.equalsIgnoreCase("c")) { if(amount==0) System.out.println( "No production to be consumed.."); else { System.out.println( "What quantity do u want to consume?"); currAmt=s.nextInt(); if(currAmt>amount) System.out.println( "Can't consume more than production !"); else amount=amount-currAmt; } } else { System.out.println( "Wrong choice ! ! "); flag=false; } System.out.println( " "); } System.out.println( "The quantity in warehouse is "+amount); if(amount>500) System.out.println( "More production and few/no consumption"); } } OUTPUT If u want to produce enter p/P If u want to consume enter c/C Others if u want to exit Enter your Choice.. Amount present in warehouse = 0 p What quantity do u want to produce? 34
Enter your Choice.. Amount present in warehouse = 34 p What quantity do u want to produce? 56
Enter your Choice.. Amount present in warehouse = 90 c What quantity do u want to consume? U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 38
100 Can't consume more than production !
Enter your Choice.. Amount present in warehouse = 90 c
What quantity do u want to consume? 90
Enter your Choice.. Amount present in warehouse = 0 c No production to be consumed..
Enter your Choice.. Amount present in warehouse = 0 s Wrong choice ! !
The quantity in warehouse is 0
RESULT Thus the code is written in Java and executed for implementing Producer and consumer problem. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 39
CONCURRENT LIST ALGORITHM: Step 1: Start Step 2: Run all the threads simultaneously Step 3: Lock the list to access it with the thread one and make other threads if present to wait Step 3.1: Get choice as input Step 3.2: To add an element list Step 3.2.1: Get the element and add to the end of the list Step 3.3: To delete the element Step 3.3.1: Get the element and remove from the list Step 3.4: To display the list, print the list Step 3.5: when choice is wrong, terminate the current thread and unlock the list Step 4: If a thread is waiting then continue till list is locked Step 4.1: Check if list is free for each second then Step 4.2: If list is free then go to Step3 Step 4.3: Else go to Step 4 Step 5: End Algorithm when no thread is waiting
JAVA CODE List_Thread.java package ConList; class RunnableList implements Runnable { Thread runner; boolean flag=true; public RunnableList() {
} public void run() { System.out.println("Now executing thread----"+ Thread.currentThread()); List l = new List(); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 40
l.myList(); } }
public class List_Thread { public static void main(String[] args) { Thread thread1 = new Thread(new RunnableList(), "thread1"); Thread thread2 = new Thread(new RunnableList(), "thread2"); //Start the threads thread1.start(); if(List.choice>3) { thread2.start(); } else { System.out.println(" "); System.out.println("Some thread is accessing the List..."); System.out.println("Now "+Thread.currentThread() +" is waiting......"); create(thread2); } }
public static void create(Thread thread) { try { //delays for one second Thread.sleep(1000); } catch (InterruptedException e) { } finally { if(List.choice>3) { thread.start(); } else { create(thread); } } } } List.java package ConList; import java.util.*; public class List { static ArrayList<Integer> list1=new ArrayList<Integer>(); public static int choice; U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 41
static Scanner s = new Scanner(System.in); public void myList() { int item; System.out.println("1. add element"); System.out.println("2. delete element"); System.out.println("3. display list"); System.out.println("Enter choice..."); choice=s.nextInt(); while(choice<4 && choice>0) { if(choice==1) { System.out.println("Enter item to be added.."); item=s.nextInt(); add(item); } else if(choice==2) { System.out.println("Enter item to be removed.."); item=s.nextInt(); remove(item); } else if(choice==3) { System.out.println("The List is.."+list1); } System.out.println("Enter choice..."); choice=s.nextInt(); } System.out.println("---------Thread Execution completed-----------"); } static void add(int item) { list1.add(item); }
static void remove(int item) { if(!list1.isEmpty()) { if(list1.contains(item)) list1.remove(find(item)); else System.out.println("element not found"); } else System.out.println("List is empty...."); }
static int find(int item) { for(int i=0;i<list1.size();i++) if(list1.get(i)==item) U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 42
return i; return 0; } }
OUTPUT Now executing thread----Thread[thread1,5,main]
1. add element Some thread is accessing the List... 2. delete element Now Thread[main,5,main] is waiting...... 3. display list Enter choice... 1 Enter item to be added.. 1 Enter choice... 1 Enter item to be added.. 2 Enter choice... 1 Enter item to be added.. 3 Enter choice... 3 The List is..[1, 2, 3] Enter choice... 2 Enter item to be removed.. 1 Enter choice... 4 ---------Thread Execution completed----------- Now executing thread----Thread[thread2,5,main] 1. add element 2. delete element 3. display list Enter choice... 3 The List is..[2, 3] Enter choice... 1 Enter item to be added.. 5 Enter choice... 3 The List is..[2, 3, 5] U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 43
Enter choice... 2 Enter item to be removed.. 1 Enter choice... 5 ---------Thread Execution completed-----------
RESULT Thus the code is written in Java and executed for accessing list concurrently. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 44
CONCURRENT STACK ALGORITHM: Step 1: Start Step 2: Run all the threads simultaneously Step 3: Lock the stack to access it with the thread one and make other threads if present to wait Step 3.1: Get choice as input Step 3.2: To push an element list Step 3.2.1: Get the element and add to the top of stack Step 3.3: To pop an element Step 3.3.1: Remove the element from top of the stack Step 3.4: To display the stack, print the stack Step 3.5: when choice is wrong, terminate the current thread and unlock the stack Step 4: If a thread is waiting then continue till list is locked Step 4.1: Check if list is free for each second then Step 4.2: If list is free then go to Step3 Step 4.3: Else go to Step 4 Step 5: End Algorithm when no thread is waiting
JAVA CODE Stack_Thread.java package ConStack; class RunnableStack implements Runnable { Thread runner; boolean flag=true; public RunnableStack() { } public void run() { System.out.println("Now executing thread----" +Thread.currentThread()); Stack s = new Stack(); s.myStack(); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 45
} }
public class Stack_Thread { public static void main(String[] args) { Thread thread1 = new Thread(new RunnableStack(), "thread1"); Thread thread2 = new Thread(new RunnableStack(), "thread2"); //Start the threads thread1.start(); if(Stack.choice>3) thread2.start(); else { System.out.println("<-------------> Some thread is accessing the Stack..."); System.out.println("<-------------> Now "+ Thread.currentThread() +" is waiting......"); create(thread2); } }
public static void create(Thread thread) { try { //delays for one second Thread.sleep(1000); } catch (InterruptedException e) { } finally { if(Stack.choice>3) thread.start(); else create(thread); } } } Stack.java package ConStack; import java.util.*;
public class Stack { static int[] stack1 = new int[25]; public static int choice,top=-1; static Scanner s = new Scanner(System.in);
public void myStack() { int item; System.out.println("1. Push element"); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
static void pop() { System.out.println("The element popped is "+stack1[top]); top--; }
static void printStack() { if(top==-1) System.out.print("empty"); else { U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
OUTPUT Now executing thread----Thread[thread1,5,main] <-------------> Some thread is accessing the Stack... 1. Push element 2. Pop element 3. Display Stack Enter choice... <-------------> Now Thread[main,5,main] is waiting...... 1 Enter item to be pushed.. 1 Enter choice... 1 Enter item to be pushed.. 2 Enter choice... 1 Enter item to be pushed.. 3 Enter choice... 3 The stack is..[ 3 2 1 ] Enter choice... 4 -----------Thread Execution completed---------- Now executing thread----Thread[thread2,5,main] 1. Push element 2. Pop element 3. Display Stack Enter choice... 3 The stack is..[ 3 2 1 ] Enter choice... 2 The element popped is 3 Enter choice... 1 Enter item to be pushed.. 4 U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 48
Enter choice... 3 The stack is..[ 4 2 1 ] Enter choice... 5 -----------Thread Execution completed----------
RESULT Thus the code is written in Java and executed for accessing stack concurrently. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 49
CONCURRENT QUEUE ALGORITHM: Step 1: Start Step 2: Run all the threads simultaneously Step 3: Lock the queue to access it with the thread one and make other threads if present to wait Step 3.1: Get choice as input Step 3.2: To enqueue an element to the queue Step 3.2.1: Get the element and add to the end of the queue Step 3.3: To dequeue an element Step 3.3.1: remove the element which is in the beginning of the queue Step 3.4: To display the queue, print the queue Step 3.5: when choice is wrong, terminate the current thread and unlock the queue Step 4: If a thread is waiting then continue till list is locked Step 4.1: Check if list is free for each second then Step 4.2: If list is free then go to Step3 Step 4.3: Else go to Step 4 Step 5: End Algorithm when no thread is waiting
JAVA CODE Queue_Thread.java package ConQueue; class RunnableQueue implements Runnable { Thread runner; boolean flag=true; public RunnableQueue() {
} public void run() { System.out.println("Now executing thread----"+Thread.currentThread()); Queue l = new Queue(); l.myQueue(); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 50
} }
public class Queue_Thread { public static void main(String[] args) { Thread thread1 = new Thread(new RunnableQueue(), "thread1"); Thread thread2 = new Thread(new RunnableQueue(), "thread2"); //Start the threads thread1.start(); if(Queue.choice>3) thread2.start(); else { System.out.println(" "); System.out.println("Some thread is accessing the Queue..."); System.out.println("Now "+Thread.currentThread() +" is waiting......"); create(thread2); } }
public static void create(Thread thread) { try { //delays for one second Thread.sleep(1000); } catch (InterruptedException e) { } finally { if(Queue.choice>3) thread.start(); else create(thread); } } } Queue.java package ConQueue; import java.util.*; public class Queue { static int[] queue1 = new int[25]; public static int choice,rear=0,front=0; static Scanner s = new Scanner(System.in); public void myQueue() { int item; System.out.println("1. Push element"); System.out.println("2. Pop element"); System.out.println("3. Display Stack"); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
static void dequeue() { System.out.println("The element dequeued is "+queue1[front]); front++; }
static void printQueue() { if(rear==front) System.out.print("empty"); else { System.out.print("[ "); for(int i=front;i<rear;i++) System.out.print(queue1[i]+" "); System.out.println("]"); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 52
} } }
OUTPUT Now executing thread----Thread[thread1,5,main]
Some thread is accessing the Queue... Now Thread[main,5,main] is waiting...... 1. Push element 2. Pop element 3. Display Stack Enter choice... 1 Enter item to be added.. 1 Enter choice... 1 Enter item to be added.. 2 Enter choice... 1 Enter item to be added.. 3 Enter choice... 3 The queue is.. [ 1 2 3 ] Enter choice... 2 The element dequeued is 1 Enter choice... 4 ---------Thread Execution completed----------- Now executing thread----Thread[thread2,5,main] 1. Push element 2. Pop element 3. Display Stack Enter choice... 3 The queue is.. [ 2 3 ] Enter choice... 1 Enter item to be added.. 4 Enter choice... U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 53
3 The queue is.. [ 2 3 4 ] Enter choice... 5 ---------Thread Execution completed-----------
RESULT Thus the code is written in Java and executed for accessing queue concurrently. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 54
DYNAMIC PROGRAMMING ALGORITHM: Step 1: Start Step 2: Get an input graph G, source node S with cost of each edge c <u, v> Step 3: Assign path of each node as NIL Step 4: Assign distance of each node except S as INFINITY Step 5: Assign distance of S as 0 Step 6: Add S to notHandled Step 7: Sort the nodes based on the distance Step 8: Choose the node U, with minimum distance Step 8.1: Add all children of U to notHandled Step 8.2: For all the child nodes of U Step 8.2.1: Assign path as node U Step 8.2.2: If distance of current node greater than d(U) + c <u, v> Step 8.2.2.1: Assign distance as d(U) + c <u, v> Step 8.3: Move U from notHandled to Handled Step 9: Go to step 7 if notHandled is not empty Step 10: Return all the nodes and their cost from the source node S Step 11: End Algorithm
JAVA CODE import java.util.*; public class DynamicPrgm { static ArrayList<String> start = new ArrayList<String>(); static ArrayList<String> end = new ArrayList<String>(); static ArrayList<Integer> cost = new ArrayList<Integer>(); static ArrayList<String> nodes = new ArrayList<String>(); static int[] length = new int[20]; static ArrayList<String> handled = new ArrayList<String>(); static ArrayList<String> notHandled = new ArrayList<String>(); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 55
static int edgeCount;
public static void main(String[] arg) { int node; int i; Scanner s= new Scanner(System.in); // Get start node, end node, cost of each edge from user System.out.println( "NOTE: The first node will be taken as source"); System.out.println( "Enter the number of edges:"); edgeCount=s.nextInt(); for(i=0; i<edgeCount;i++) { System.out.println( "Enter the FROM node:"); start.add(s.next()); System.out.println( "Enter the TO node:"); end.add(s.next()); while(start.get(i).equalsIgnoreCase(end.get(i))) { end.remove(i); System.out.println( "Error: ***--SAME AS START NODE--***"); System.out.println( "Enter the TO node:"); end.add(s.next()); } System.out.println( "Enter the cost of edge:"); cost.add(s.nextInt()); if(!(nodes.contains(start.get(i)))) nodes.add(start.get(i)); if(!(nodes.contains(end.get(i)))) nodes.add(end.get(i)); } //Initialising table values for(i=0;i<nodes.size();i++) if(i==0) { // for ROOT/SOURCE node notHandled.add(nodes.get(i)); length[i]=0; } else // other nodes in the graph length[i]=1000; for(i=0;i<nodes.size();i++) { node=findMinimum(); findChild(node); notHandled.clear(); handled.add(nodes.get(node)); } System.out.println("NODE LENGTH"); print(); System.out.println(""); }
static int findMinimum() U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 56
3 5 7 2 6 4 p q r t s { int cost=1000; int node=0; for(int k=0; k<nodes.size(); k++) if(cost>length[k] && !(handled.contains(nodes.get(k)))) { cost=length[k]; node=k; } return node; }
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 57
OUTPUT NOTE: The first node will be taken as source Enter the number of edges: 6 Enter the FROM node: p Enter the TO node: q Enter the cost of edge: 5 Enter the FROM node: p Enter the TO node: r Enter the cost of edge: 4 Enter the FROM node: q Enter the TO node: s Enter the cost of edge: 7 Enter the FROM node: q Enter the TO node: t Enter the cost of edge: 3 Enter the FROM node: r Enter the TO node: s Enter the cost of edge: 2 Enter the FROM node: r Enter the TO node: t Enter the cost of edge: 6 NODE LENGTH p - 0 q - 5 r - 4 s - 6 t - 8
RESULT Thus the code is written in Java and executed for performing dynamic programming in calculating the cost of each node from source node. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 58
RANDOMIZED ALGORITHM ALGORITHM: Step 1: Start Step 2: Get the choice from user either Combination or Permutation Step 3: If choice is Combination Step 3.1: Get n and r Step 3.2: Calculate n! / [(n-r)! r!] Step 3.3: Return result Step 4: If choice is Permutation Step 4.1: Get n and r Step 4.2: Calculate n! / (n-r)! Step 4.3: Return result Step 5: End Algorithm
public class RandomizedAlgm { static boolean flag=true; static String choice; static int n; static int r; public static void main(String[] arg) { Scanner s=new Scanner(System.in); System.out.println( "If u want to find Permutations p/P"); System.out.println( "If u want to find Combinations c/C"); System.out.println( "Others if u want to exit"); while(flag) { System.out.println( " "); System.out.println( "Enter your choice.."); choice=s.next(); if(choice.equals("p")) { System.out.println( "TO CALCULATE nPr :"); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 59
System.out.println( "Enter the total no. of items, n :"); n=s.nextInt(); System.out.println( "Enter the no. of items in one sample, r :"); r=s.nextInt(); if(n>=r) findP(n,r); else System.out.println( "r should be lesser than or equal to n"); } else if(choice.equals("c")) { System.out.println( "TO CALCULATE nCr :"); System.out.println( "Enter the total no. of items, n :"); n=s.nextInt(); System.out.println( "Enter the no. of items in one sample, r :"); r=s.nextInt(); if(n>=r) findC(n,r); else System.out.println( "r should be lesser than or equal to n"); } else { System.out.println( "Wrong Choice..."); flag=false; } } }
public static void findP(int n, int r) { // npr = n!/(n-r)! int result=fact(n)/fact(n-r); System.out.println( n+" P "+r+" = "+result); }
public static void findC(int n, int r) { // ncr = n!/(n-r)!r! int result=fact(n)/(fact(n-r)*fact(r)); System.out.println( n+" C "+r+" = "+result); }
public static int fact(int n) { int fact=1; for(int i=1;i<=n;i++) { fact=fact*i; } return fact; } } U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 60
OUTPUT If u want to find Permutations p/P If u want to find Combinations c/C Others if u want to exit
Enter your choice.. p TO CALCULATE nPr : Enter the total no. of items, n : 10 Enter the no. of items in one sample, r : 5 10 P 5 = 30240
Enter your choice.. c TO CALCULATE nCr : Enter the total no. of items, n : 7 Enter the no. of items in one sample, r : 4 7 C 4 = 35
Enter your choice.. h Wrong Choice...
RESULT Thus the code is written in Java and executed for a randomized algorithm to calculate combination and permutation. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 61
DINING PHILOSOPHERS PROBLEM Algorithm: Step 1: Start Step 2: Assume all philosophers are reading Step 3: Input a philosopher and his action Step 3.1: If action is to eat Step 3.1.1: Check if both chopsticks are available for the philosopher then Step 3.1.1.1: Lock the chopsticks Step 3.1.2: Else keep the philosopher waiting Step 3.2: if action is to read Step 3.2.1: Check if the chopsticks are locked then Step 3.2.1.1: Unlock the chopsticks Step 3.3: Else Exit Step 4: End Algorithm
public class PhilosopherPrblm { static Scanner s=new Scanner(System.in); static int[] reader={0,0,0,0,0}; static int[] chopStick={0,0,0,0,0}; static int philo; static String choice; static boolean flag=true;
public static void main(String[] arg) { System.out.println( "NOTE: Initally all philosophers are reading..."); while(flag) { System.out.println( "Select a philosopher.."); philo=s.nextInt(); if(philo<6 && philo>0) { U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 62
System.out.println( "Does he want to eat(e/E) / read(r/R)?"); choice=s.next(); if(choice.equalsIgnoreCase("e")) { switch(philo) { case 1: lock(0,1); break; case 2: lock(1,2); break; case 3: lock(2,3); break; case 4: lock(3,4); break; case 5: lock(4,0); break; } } else if(choice.equalsIgnoreCase("r")) { switch(philo) { case 1: unlock(0,1); break; case 2: unlock(1,2); break; case 3: unlock(2,3); break; case 4: unlock(3,4); break; case 5: unlock(4,0); break; } } else { System.out.println( "Wrong choice.. The philosopher can either read or eat.."); flag=false; } job(); System.out.println( "........................................."); } else U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 63
{ System.out.println( "There are only 5 philosophers on the table.."); flag=false; } } }
static void lock(int m, int n) { if(chopStick[m]==0 && chopStick[n]==0) { chopStick[m]=1; chopStick[n]=1; reader[m]=1; } else { System.out.println( "Wait till philosopher's neighbour finishes eating.."); System.out.println( " "); } }
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 64
1 2 3 5 4 1 2 3 4 5 PICTURIZATION
OUTPUT NOTE: Initally all philosophers are reading... Select a philosopher.. 2 Does he want to eat(e/E) / read(r/R)? e Philosopher 1 is reading Philosopher 2 is eating Philosopher 3 is reading Philosopher 4 is reading Philosopher 5 is reading ......................................... Select a philosopher.. 4 Does he want to eat(e/E) / read(r/R)? e Philosopher 1 is reading Philosopher 2 is eating Philosopher 3 is reading Philosopher 4 is eating Philosopher 5 is reading ......................................... Select a philosopher..
U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 65
5 Does he want to eat(e/E) / read(r/R)? e Wait till philosopher's neighbour finishes eating..
Philosopher 1 is reading Philosopher 2 is eating Philosopher 3 is reading Philosopher 4 is eating Philosopher 5 is reading ......................................... Select a philosopher.. 6 There are only 5 philosophers on the table..
RESULT Thus the code is written in Java and executed for the implementation of dining philosophers problem. U N I T E D