advanced data structures lab manual

66
 UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. 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 Dijikstra’s 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 Philosopher’s Problem 61

Upload: srisairampoly

Post on 16-Oct-2015

44 views

Category:

Documents


2 download

DESCRIPTION

lab manual for data structure lab

TRANSCRIPT

  • 5/26/2018 Advanced Data Structures Lab Manual

    1/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.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

  • 5/26/2018 Advanced Data Structures Lab Manual

    2/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    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

    Step 7: End the Algorithm

    JAVA CODE

    importjava.util.*;

    publicclassGraphSearch

    {

    publicstaticvoidmain(String[] arg)

    {ArrayList start = new ArrayList();

    ArrayList end = newArrayList();

    ArrayList nodes = newArrayList();

    ArrayList notHandled = newArrayList();

    ArrayList handled = newArrayList();

    intedgeCount, i, hSize, nSize;

    String node;

    Scanner s= newScanner(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

  • 5/26/2018 Advanced Data Structures Lab Manual

    3/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

  • 5/26/2018 Advanced Data Structures Lab Manual

    4/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 4

    a

    b c

    ed

    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.

  • 5/26/2018 Advanced Data Structures Lab Manual

    5/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    Step 7: End the Algorithm

    JAVA CODE

    importjava.util.*;publicclassBreadthFirstSearch

    {

    publicstaticvoidmain(String[] arg)

    {

    ArrayList start = new ArrayList();

    ArrayList end = newArrayList();

    ArrayList nodes = newArrayList();

    ArrayList notHandled = newArrayList();

    ArrayList handled = newArrayList();

    intedgeCount, i, hSize;

    Scanner s= newScanner(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

  • 5/26/2018 Advanced Data Structures Lab Manual

    6/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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; i0)

    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

    ec

  • 5/26/2018 Advanced Data Structures Lab Manual

    7/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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.

  • 5/26/2018 Advanced Data Structures Lab Manual

    8/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    Step 7: End the Algorithm

    JAVA CODE

    importjava.util.*;

    publicclassDepthFirstSearch

    {

    staticArrayList start= new ArrayList();

    staticArrayList end= newArrayList();

    staticString[] stack= newString[10];

    staticArrayList handled= newArrayList();

    staticArrayList notHandled= newArrayList();

    staticArrayList child= newArrayList();

    staticintedgeCount,top=-1;

    publicstaticvoidmain(String[] arg){

    Scanner s= newScanner(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(inti=0; i

  • 5/26/2018 Advanced Data Structures Lab Manual

    9/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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");

    }

    staticvoidcSort()

    {

    //since the child nodes are inserted in reverse order, reverse it

    for(intq=child.size();q>0;q--)

    push(child.get(q-1));

    }

    staticvoidpush(String node)

    {

    // add node to stack and notHandled

    if(!(notHandled.contains(node)) && !(handled.contains(node)))

    {

    top++;

    stack[top]=node;

    notHandled.add(node);

    }

    }

    staticvoidpop()

    {

    //move the top node from notHandled to handled

    if(top>-1)

    {

    handled.add(stack[top]);

    notHandled.remove(stack[top]);

    top--;

    }

    }

    staticvoidcheck(String node)

    {

    // insert the parent node in notHandled node

    push(node);

    printStack();

    intflag=1;

    for(intq=0; q

  • 5/26/2018 Advanced Data Structures Lab Manual

    10/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 10

    a

    b c

    ed

    pop();

    flag=0;

    }

    //since they are not arranged, use child array ad temp arraychild.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]);

    }

    staticvoidprintStack()

    {

    //print the notHandled node in reverse order, since its stack

    ArrayList sort = newArrayList();

    for(intq=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

  • 5/26/2018 Advanced Data Structures Lab Manual

    11/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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.

  • 5/26/2018 Advanced Data Structures Lab Manual

    12/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    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

    Step 8.2.2.1: Assign distance as d(U) + c

    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

    importjava.util.*;

    publicclassShortestPath_Dijikstra

    {

    staticArrayList start= new ArrayList();

    staticArrayList end= newArrayList();

    staticArrayList cost= newArrayList();

    staticArrayList nodes= newArrayList();staticString[]path= newString[20];

    staticint[] length= newint[20];

  • 5/26/2018 Advanced Data Structures Lab Manual

    13/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 13

    staticArrayList handled= newArrayList();

    staticArrayList notHandled= newArrayList();

    staticintedgeCount;

    publicstaticvoidmain(String[] arg)

    {

    intnode, i;

    Scanner s= newScanner(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

  • 5/26/2018 Advanced Data Structures Lab Manual

    14/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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("");

    }

    staticintfindMinimum()

    {

    intcost=1000;

    intnode=0;

    for(intk=0; klength[k] && !(handled.contains(nodes.get(k))))

    {

    cost=length[k];

    node=k;

    }

    returnnode;

    }

    staticvoidfindChild(intnode)

    {

    for(intj=0;j

  • 5/26/2018 Advanced Data Structures Lab Manual

    15/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 15

    3

    5

    72

    6

    4

    p

    q r

    ts

    return0;

    }

    }

    GRAPH

    OUTPUT

    NOTE: The first node will be taken as source

    Enter the number of edges:

    6Enter 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:

    4Enter 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:

    3Enter the FROM node:

    r

  • 5/26/2018 Advanced Data Structures Lab Manual

    16/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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:

    2Enter 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 rt 0 8 q

  • 5/26/2018 Advanced Data Structures Lab Manual

    17/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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 pr 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.

  • 5/26/2018 Advanced Data Structures Lab Manual

    18/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    packageGraph;importjava.util.*;

    publicclassTopologicalSort

    {

    staticArrayList start= new ArrayList();

    staticArrayList end= newArrayList();

    staticArrayList nodes= newArrayList();

    staticint[] indegree= newint[20];

    staticArrayList handled= newArrayList();

    staticintedgeCount, i, nodeSize, k,j, count,pNodeSize;

    staticbooleanflag=true;

    publicstaticvoidmain(String[] arg)

    {

    intmin;

    Scanner s= newScanner(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

  • 5/26/2018 Advanced Data Structures Lab Manual

    19/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

  • 5/26/2018 Advanced Data Structures Lab Manual

    20/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 20

    a

    eb

    cd

    }

    }

    staticintminDegree(){

    intmin=indegree[0],index=0;

    for(i=0;iindegree[i])

    {

    min=indegree[i];

    index=i;

    }

    }

    returnindex;

    }

    staticbooleancheck()

    {

    for(i=0;i

  • 5/26/2018 Advanced Data Structures Lab Manual

    21/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    Sorted queue [a]

    -----------------------------------

    indegree of b is 0

    indegree of c is 1

    indegree of d is 1

    indegree of e is 1

    Sorted queue [a, b]

    -----------------------------------

    indegree of c is 0

    indegree of d is 1

    indegree of e is 1

    Sorted queue [a, b, c]

    -----------------------------------

    indegree of d is 0

    indegree of e is 0

    Sorted queue [a, b, c, d]

    -----------------------------------

    indegree of e is 0

    Sorted queue [a, b, c, d, e]

    -----------------------------------

    RESULT Thus the code is written in Java and executed for implementing Topological sorting.

  • 5/26/2018 Advanced Data Structures Lab Manual

    22/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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_capacitymin_cut

    Step 5.3.2: Assign the result to flow_capacity of the edge

    Step 5.3.3: Calculate and assign netFlow = netFlowmin_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

    importjava.util.*;

    publicclassHillClimbing

    {

    staticArrayList start= new ArrayList();

    staticArrayList end= newArrayList();

    staticArrayList nodes= newArrayList();

    staticArrayList capacity= newArrayList();

    staticArrayList stack= newArrayList();

    staticint[]flow= newint[20];

  • 5/26/2018 Advanced Data Structures Lab Manual

    23/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 23

    staticString dest,source;

    staticintedgeCount,i,j,netFlow,flag=0,top,netCapacity=0,capa;

    publicstaticvoidmain(String[] arg)

    {Scanner s= newScanner(System.in);

    System.out.println( "Enter the number of edges:");

    edgeCount=s.nextInt();

    for(i=0; i

  • 5/26/2018 Advanced Data Structures Lab Manual

    24/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 24

    else

    queue.add(end.get(i));

    }

    while(!queue.isEmpty()){

    findPath(queue.get(0));

    stack.remove(stack.size()-1);

    queue.remove(0);

    }

    }

    staticvoidpathCapacity(ArrayList path)

    {

    intmin=1000;

    ArrayList edges = newArrayList();

    for(j=0;jmin)

    {

    netFlow=netFlow-min;

    capa=capa+min;

    System.out.println("Flow along the PATH "+stack+" with FLOW "+min);

    for(intq=0;q

  • 5/26/2018 Advanced Data Structures Lab Manual

    25/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    10b

    13

    a

    e

    c

    d

    ts

    }

    }

    }

    staticvoidcheck()

    {

    if(netFlow>0)

    {

    System.out.println("The Maximum flow of the network is "+capa);

    System.out.println("The requested flow cant be accomodated.."+netFlow);

    }

    }

    staticvoidprint()

    {

    System.out.println(" ");

    for(j=0;j

  • 5/26/2018 Advanced Data Structures Lab Manual

    26/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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:

    cEnter 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

  • 5/26/2018 Advanced Data Structures Lab Manual

    27/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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/7Flow 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.

  • 5/26/2018 Advanced Data Structures Lab Manual

    28/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    importjava.util.*;

    publicclassMergeSort{

    staticintn,i;

    staticArrayList element= newArrayList();

    staticArrayList sorted= newArrayList();

    publicstaticvoidmain(String[] arg)

    {

    Scanner s= newScanner(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

  • 5/26/2018 Advanced Data Structures Lab Manual

    29/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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);

    }

    staticvoidsplitting(ArrayList entire)

    {

    intsize=entire.size()/2;

    ArrayList right = newArrayList();

    ArrayList left = newArrayList();

    // if n>2 then recurse

    if(entire.size()>2)

    {

    //divide into 2

    for(i=0;i

  • 5/26/2018 Advanced Data Structures Lab Manual

    30/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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++;}

    elseif(ls==y && rs==x && ss>z)//only sort

    {

    if(!merged.contains(sorted.get(z)))

    merged.add(sorted.get(z));

    z++;

    i++;

    }

    elseif(ls>y && rs==x && ss>z)//left n sort

    {

    if(left.get(y)x && ss>z)//right n sort

    {

    if(right.get(x)y && rs>x && ss==z)//right n left

    {

    if(right.get(x)

  • 5/26/2018 Advanced Data Structures Lab Manual

    31/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 31

    }

    else

    {

    if(!merged.contains(left.get(y)))merged.add(left.get(y));

    y++;

    i++;

    }

    }

    elseif(ls>y && rs>x && ss>z)//right, sort n left

    {

    if(left.get(y)

  • 5/26/2018 Advanced Data Structures Lab Manual

    32/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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 :

    3Enter 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.

  • 5/26/2018 Advanced Data Structures Lab Manual

    33/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    importjava.util.*;

    publicclassQuickSort

    {

    staticintn,i;

    staticArrayList element= newArrayList();

    staticArrayList sorted= newArrayList();

    publicstaticvoidmain(String[] arg)

    {

    Scanner s= newScanner(System.in);

    //get elements

    System.out.println( "Enter the number of elements to be sorted:");

    n=s.nextInt();

    for(i=0;i

  • 5/26/2018 Advanced Data Structures Lab Manual

    34/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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);

    }

    }

    staticvoidquickSort(ArrayList entire)

    {

    intsum=0,pivot=0;

    ArrayList smaller = newArrayList();

    ArrayList higher = newArrayList();

    // if n>2 then recurse

    if(entire.size()>2)

    {

    //find pivot element

    for(i=0;i

  • 5/26/2018 Advanced Data Structures Lab Manual

    35/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 35

    System.out.println(" "+pivot+" ["+entire.get(0)+"] ["+entire.get(1)+"]");

    }

    elseif(entire.size()==1)

    {sorted.add(entire.get(0));

    }

    }

    }

    }

    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.

  • 5/26/2018 Advanced Data Structures Lab Manual

    36/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    importjava.util.*;

    publicclassProducerConsumer

    {

    staticintamount=0, currAmt;

    staticbooleanflag=true;staticString choice;

    publicstaticvoidmain(String[] arg)

    {

    Scanner s=newScanner(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"))

  • 5/26/2018 Advanced Data Structures Lab Manual

    37/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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;

    }

    elseif(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

    cWhat quantity do u want to consume?

  • 5/26/2018 Advanced Data Structures Lab Manual

    38/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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.

  • 5/26/2018 Advanced Data Structures Lab Manual

    39/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    packageConList;

    classRunnableList implementsRunnable

    {

    Thread runner;

    booleanflag=true;

    publicRunnableList() {

    }

    publicvoidrun()

    {

    System.out.println("Now executing thread----"+ Thread.currentThread());List l = newList();

  • 5/26/2018 Advanced Data Structures Lab Manual

    40/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 40

    l.myList();

    }

    }

    publicclassList_Thread

    {

    publicstaticvoidmain(String[] args)

    {

    Thread thread1 = newThread(newRunnableList(), "thread1");

    Thread thread2 = newThread(newRunnableList(), "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);

    }

    }

    publicstaticvoidcreate(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

    packageConList;

    importjava.util.*;

    publicclassList

    {

    staticArrayList list1=newArrayList();publicstaticintchoice;

  • 5/26/2018 Advanced Data Structures Lab Manual

    41/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 41

    staticScanner s= newScanner(System.in);

    publicvoidmyList()

    {

    intitem;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(choice0)

    {

    if(choice==1)

    {

    System.out.println("Enter item to be added..");

    item=s.nextInt();

    add(item);

    }

    elseif(choice==2)

    {

    System.out.println("Enter item to be removed..");

    item=s.nextInt();

    remove(item);

    }

    elseif(choice==3)

    {

    System.out.println("The List is.."+list1);

    }

    System.out.println("Enter choice...");

    choice=s.nextInt();

    }

    System.out.println("---------Thread Execution completed-----------");

    }

    staticvoidadd(intitem)

    {

    list1.add(item);

    }

    staticvoidremove(intitem)

    {

    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....");

    }

    staticintfind(intitem)

    {

    for(inti=0;i

  • 5/26/2018 Advanced Data Structures Lab Manual

    42/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 42

    returni;

    return0;

    }

    }

    OUTPUT

    Now executing thread----Thread[thread1,5,main]

    1. add element

    Some thread is accessing the List...

    2. delete elementNow 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]

  • 5/26/2018 Advanced Data Structures Lab Manual

    43/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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..

    1Enter choice...

    5

    ---------Thread Execution completed-----------

    RESULT Thus the code is written in Java and executed for accessing list concurrently.

  • 5/26/2018 Advanced Data Structures Lab Manual

    44/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    packageConStack;

    classRunnableStack implementsRunnable

    {

    Thread runner;

    booleanflag=true;

    publicRunnableStack() {

    }

    publicvoidrun()

    {

    System.out.println("Now executing thread----" +Thread.currentThread());

    Stack s = newStack();s.myStack();

  • 5/26/2018 Advanced Data Structures Lab Manual

    45/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 45

    }

    }

    publicclassStack_Thread{

    publicstaticvoidmain(String[] args)

    {

    Thread thread1 = newThread(newRunnableStack(), "thread1");

    Thread thread2 = newThread(newRunnableStack(), "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);

    }

    }

    publicstaticvoidcreate(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

    packageConStack;

    importjava.util.*;

    publicclassStack

    {

    staticint[] stack1= newint[25];

    publicstaticintchoice,top=-1;

    staticScanner s= newScanner(System.in);

    publicvoidmyStack()

    {

    intitem;System.out.println("1. Push element");

  • 5/26/2018 Advanced Data Structures Lab Manual

    46/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 46

    System.out.println("2. Pop element");

    System.out.println("3. Display Stack");

    System.out.println("Enter choice...");

    choice=s.nextInt();while(choice0)

    {

    if(choice==1)

    {

    if(top>24)

    {

    System.out.println("Stack is full...");

    }

    else

    {

    System.out.println("Enter item to be pushed..");

    item=s.nextInt();

    push(item);

    }

    }

    elseif(choice==2)

    {

    if(top==-1)

    System.out.println("Stack is empty..");

    else

    pop();

    }

    elseif(choice==3)

    {

    System.out.print("The stack is..");

    printStack();

    }

    System.out.println("Enter choice...");

    choice=s.nextInt();

    }

    System.out.println("-----------Thread Execution completed----------");

    }

    staticvoidpush(intitem)

    {

    top++;

    stack1[top]=item;

    }

    staticvoidpop()

    {

    System.out.println("The element popped is "+stack1[top]);

    top--;

    }

    staticvoidprintStack()

    {

    if(top==-1)

    System.out.print("empty");

    else{

  • 5/26/2018 Advanced Data Structures Lab Manual

    47/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 47

    System.out.print("[ ");

    for(inti=top;i>-1;i--)

    {

    System.out.print(stack1[i]+" ");}

    System.out.println("]");

    }

    }

    }

    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

  • 5/26/2018 Advanced Data Structures Lab Manual

    48/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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.

  • 5/26/2018 Advanced Data Structures Lab Manual

    49/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    packageConQueue;

    classRunnableQueue implementsRunnable

    {

    Thread runner;

    booleanflag=true;

    publicRunnableQueue() {

    }

    publicvoidrun() {

    System.out.println("Now executing thread----"+Thread.currentThread());

    Queue l = newQueue();l.myQueue();

  • 5/26/2018 Advanced Data Structures Lab Manual

    50/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 50

    }

    }

    publicclassQueue_Thread{

    publicstaticvoidmain(String[] args)

    {

    Thread thread1 = newThread(newRunnableQueue(), "thread1");

    Thread thread2 = newThread(newRunnableQueue(), "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);

    }

    }

    publicstaticvoidcreate(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

    packageConQueue;

    importjava.util.*;

    publicclassQueue

    {

    staticint[] queue1= newint[25];

    publicstaticintchoice,rear=0,front=0;

    staticScanner s= newScanner(System.in);

    publicvoidmyQueue()

    {

    intitem;

    System.out.println("1. Push element");

    System.out.println("2. Pop element");System.out.println("3. Display Stack");

  • 5/26/2018 Advanced Data Structures Lab Manual

    51/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 51

    System.out.println("Enter choice...");

    choice=s.nextInt();

    while(choice0)

    {if(choice==1)

    {

    if(rear>24)

    System.out.println("Modifications on 25 elements processed..");

    else

    {

    System.out.println("Enter item to be added..");

    item=s.nextInt();

    enqueue(item);

    }

    }

    elseif(choice==2)

    {

    if(rear==front)

    System.out.println("Queue is empty");

    else

    dequeue();

    }

    elseif(choice==3)

    {

    System.out.println("The queue is..");

    printQueue();

    }

    System.out.println("Enter choice...");

    choice=s.nextInt();

    }

    System.out.println("-----------Thread Execution completed----------");

    }

    staticvoidenqueue(intitem)

    {

    queue1[rear]=item;

    rear++;

    }

    staticvoiddequeue()

    {

    System.out.println("The element dequeued is "+queue1[front]);

    front++;

    }

    staticvoidprintQueue()

    {

    if(rear==front)

    System.out.print("empty");

    else

    {

    System.out.print("[ ");

    for(inti=front;i

  • 5/26/2018 Advanced Data Structures Lab Manual

    52/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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..

    4Enter choice...

  • 5/26/2018 Advanced Data Structures Lab Manual

    53/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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.

  • 5/26/2018 Advanced Data Structures Lab Manual

    54/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    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

    Step 8.2.2.1: Assign distance as d(U) + c

    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

    importjava.util.*;

    publicclassDynamicPrgm

    {

    staticArrayList start= new ArrayList();

    staticArrayList end= newArrayList();

    staticArrayList cost= newArrayList();

    staticArrayList nodes= newArrayList();

    staticint[] length= newint[20];

    staticArrayList handled= newArrayList();

    staticArrayList notHandled= newArrayList();

  • 5/26/2018 Advanced Data Structures Lab Manual

    55/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 55

    staticintedgeCount;

    publicstaticvoidmain(String[] arg){

    intnode;

    inti;

    Scanner s= newScanner(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

  • 5/26/2018 Advanced Data Structures Lab Manual

    56/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, Coimbatore- 641 020.Department of Computer Science and Engineering

    Advanced Data Structures Laboratory

    Antonita Shilpa . J UIT ( FMCS02 ) 56

    3

    5

    72

    6

    4

    p

    q r

    ts

    {

    intcost=1000;

    intnode=0;

    for(intk=0; klength[k] && !(handled.contains(nodes.get(k))))

    {

    cost=length[k];

    node=k;

    }

    returnnode;

    }

    staticvoidfindChild(intnode)

    {

    for(intj=0;j

  • 5/26/2018 Advanced Data Structures Lab Manual

    57/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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.

  • 5/26/2018 Advanced Data Structures Lab Manual

    58/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    JAVA CODE

    packageDynamicProgram;

    importjava.util.*;

    publicclassRandomizedAlgm

    {

    staticbooleanflag=true;

    staticString choice;

    staticintn;

    staticintr;publicstaticvoidmain(String[] arg)

    {

    Scanner s=newScanner(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 :");

  • 5/26/2018 Advanced Data Structures Lab Manual

    59/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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");

    }

    elseif(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;

    }

    }

    }

    publicstaticvoidfindP(intn, intr)

    {

    // npr = n!/(n-r)!

    intresult=fact(n)/fact(n-r);

    System.out.println( n+" P "+r+" = "+result);

    }

    publicstaticvoidfindC(intn, intr)

    {

    // ncr = n!/(n-r)!r!

    intresult=fact(n)/(fact(n-r)*fact(r));

    System.out.println( n+" C "+r+" = "+result);

    }

    publicstaticintfact(intn)

    {

    intfact=1;

    for(inti=1;i

  • 5/26/2018 Advanced Data Structures Lab Manual

    60/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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.

  • 5/26/2018 Advanced Data Structures Lab Manual

    61/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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

    JAVA CODE

    packageDynamicProgram;

    importjava.util.*;

    publicclassPhilosopherPrblm

    {

    staticScanner s=newScanner(System.in);

    staticint[] reader={0,0,0,0,0};staticint[] chopStick={0,0,0,0,0};

    staticintphilo;

    staticString choice;

    staticbooleanflag=true;

    publicstaticvoidmain(String[] arg)

    {

    System.out.println( "NOTE: Initally all philosophers are reading...");

    while(flag)

    {

    System.out.println( "Select a philosopher..");

    philo=s.nextInt();if(philo0)

    {

  • 5/26/2018 Advanced Data Structures Lab Manual

    62/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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)

    {

    case1:

    lock(0,1);

    break;

    case2:

    lock(1,2);

    break;

    case3:

    lock(2,3);

    break;

    case4:

    lock(3,4);

    break;

    case5:

    lock(4,0);

    break;

    }

    }

    elseif(choice.equalsIgnoreCase("r"))

    {

    switch(philo)

    {

    case1:

    unlock(0,1);

    break;

    case2:

    unlock(1,2);

    break;

    case3:

    unlock(2,3);

    break;

    case4:

    unlock(3,4);

    break;

    case5:

    unlock(4,0);

    break;

    }

    }

    else

    {

    System.out.println( "Wrong choice.. The philosopher can either

    read or eat..");

    flag=false;

    }

    job();

    System.out.println( ".........................................");

    }else

  • 5/26/2018 Advanced Data Structures Lab Manual

    63/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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;

    }}

    }

    staticvoidlock(intm, intn)

    {

    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( " ");

    }

    }

    staticvoidunlock(intm,intn)

    {

    chopStick[m]=0;

    chopStick[n]=0;

    reader[m]=0;

    }

    staticvoidjob()

    {

    for(inti=0;i

  • 5/26/2018 Advanced Data Structures Lab Manual

    64/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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..

  • 5/26/2018 Advanced Data Structures Lab Manual

    65/65

    UNITED INSTITUTE OF TECHNOLOGYPeriyanaickenpalayam, 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 diningphilosophers problem.