data structure lab programs

Upload: nofeelingrahul

Post on 07-Apr-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/6/2019 Data Structure Lab Programs

    1/26

    Stack Definition:

    In computer science, a stack is a last in, first out(LIFO) abstract data type anddata structure. A stack can have any abstract data type as an element, but ischaracterized by only two fundamental operations, the push and the pop.

    (or)

    A collection of items in which only the most recently added item may beremoved. The latest added item is at the top. Basic operations are push and pop.Often top and is Empty are available, too. Also known as "last-in, first-out" orLIFO.

    Push:

    The push operation adds to the top of the list, hiding any items already on thestack, or initializing the stack if it is empty.

    Pop:

    The pop operation removes an item from the top of the list, and returns thisvalue to the caller. A pop either reveals previously concealed items, or results inan empty list.

    Stack Applications:

    1. Expression evaluation.

    2. Backtracking (game playing, finding paths, exhaustive searching).

    3. Memory management, run-time environment for nested language features.

    Alogarithm steps:

    1. Expression evaluation.

    2. Backtracking (game playing, finding paths, exhaustive searching).

    3. Memory management, run-time environment for nested language features.

    Alogarithm steps:

    Step 1: create a list.

    i) Create a new empty node top.

    ii) Read the stack element and store it in top's data area.

    iii) Assign top's link part as NULL (i.e. top->link=NULL).

    iv) Assign temp as top (i.e. temp=top).

  • 8/6/2019 Data Structure Lab Programs

    2/26

    Step 2: Read next stack operation.

    i) If it is Create then go to step1.

    ii) If it is Push then it process following steps

    a) Check Main memory for node creation.

    b) Create a new node top.

    c) Read the stack element and store it in top's data area.

    d) Assign top's link part as temp (i.e. top->link=temp).

    e) Assign temp as top (i.e. temp=top).

    iii) If it is pop then it process following steps

    a) If top is NULL then display stack is empty.

    b) Otherwise assign top as temp (i.e. top=temp, bring the top to top position)

    c) Assign temp as temp's link. (i.e. temp=temp->link, bring the temp to top'sprevious position).

    d) Delete top from memory.

    iv) If it is traverse then process the following steps

    a) Bring the top to stacks top position(i.e. top=temp)

    b) Repeat until top becomes NULL

    i) Display the top's data.

    ii) Assign top as top's link (top=top->link).

    C Program To Implement Stack Data Structure Using Single Linked

    List:

    #include#include

    #include#include

    /* Node decleration */

    struct node{

    int data;

  • 8/6/2019 Data Structure Lab Programs

    3/26

    struct node *link; //to maintain the link other nodes

    };

    struct node *top,*temp;

    void create();

    void push();void pop();

    void display();

    /* create function create the head node */void create()

    {

    printf("\nENTER THE FIRST ELEMENT: ");

    top=(struct node *)malloc(sizeof(struct node));scanf("%d",&top->data);

    top->link=NULL;

    temp=top;

    }

    /* display function visit the linked list from top to end */void display()

    {

    top=temp; // bring the top to top position

    printf("\n");while(top!=NULL)

    {

    printf("%d\n",top->data);top=top->link; // Now top points the previous node in the list

    }

    }void push()

    {

    printf("\nENTER THE NEXT ELEMENT: ");top=(struct node *)malloc(sizeof(struct node));

    scanf("%d",&top->data);

    top->link=temp;

    temp=top;}

    void pop(){

    if(temp==NULL)

    {printf("\nSTACK IS EMPTY\n");

    }

    else

    {

  • 8/6/2019 Data Structure Lab Programs

    4/26

    top=temp;

    printf("\nDELETED ELEMENT IS %d\n",temp->data);

    temp=temp->link;free(top);

    }

    }void main()

    {

    int ch;clrscr();

    while(1)

    {

    printf("\n\n 1.CREATE \n 2.PUSH \n 3.POP \n 4.EXIT \n");printf("\n ENTER YOUR CHOICE : ");

    scanf("%d",&ch);

    switch(ch)

    {case 1:

    create();display();

    break;

    case 2:

    push();display();

    break;

    case 3:pop();

    display();

    break;case 4:

    exit(0);

    }}

    }

    SAMPLE INPUT AND OUTPUT:

    STACK

    1. CREATE

    2. PUSH

    3. POP4. EXIT

    ENTER YOUR CHOICE : 1

    ENTER THE FIRST ELEMENT : 10

    10

    STACK

    1. CREATE

  • 8/6/2019 Data Structure Lab Programs

    5/26

    2. PUSH

    3. POP

    4. EXIT

    ENTER YOUR CHOICE: 2

    ENTER THE NEXT ELEMENT: 30

    10

    30

    STACK

    1. CREATE

    2. PUSH

    3. POP

    4. EXIT

    ENTER YOUR CHOICE: 3

    DELETED ELEMENT IS 30

    STACK

    1. CREATE

    2. PUSH

    3. POP

    4. EXIT

    ENTER YOUR CHOICE: 3

    DELETED ELEMENT IS 10

    STACK

    1. CREATE

    2. PUSH

    3. POP4. EXIT

    ENTER YOUR CHOICE: 3

    STACK IS EMPTY.

    Implementation Of Double Linked List:

    Definition:

    A variant of a linked list in which each item has a link to the previous item as well as the next.This allows easily accessing list items backward as well as forward and deleting any item inconstant time.Also known as two-way linked list, symmetrically linked list.A doubly linked list is a linked list in which each node has three fields namely data field,forward link (Flink) and backward link (Blink). Flink points to the successor node in the listwhereas Blink points to the predecessor node.

  • 8/6/2019 Data Structure Lab Programs

    6/26

    Advantages:

    1. Deletion process is easier

    2. Additional pointer for previous node is not nessary.

    3. Backwarding and forwarding traverse are possible.

    Disadvantages :

    1. More Memory space is required since it has two pointers.

    Alogrithm steps:

    Step 1: Read the list operation.

    Step 2: If operation is Create then process the following steps.

    1. Create the new node and allocate memory for the new node.

    2. Read the data in the new node.

    3. Assign Flink and Blink as NULL.

    4. Assign current as new.

    Step 3: If operation is Insertion do the following steps.

    i) Check insertion at beginning is true then

    1. Create the new node and allocate memory for the new node

    2. Read the data in the new node.

    3. Move the current node to start position

    4. Assign new->Blink =Null

    5. Assign new->Flink=current

    6. Now assign current->Blink=new

    ii) Insertion at between nodes is true then

    1. Create the new node and allocate memory for the new node

    2. Read the data in the new node.

  • 8/6/2019 Data Structure Lab Programs

    7/26

    3. Move the current node required position

    4. Assign new nodes Blink=current.

    5. Assign new nodes Flink=current->Flink

    6. Assign current nodes Flink =new

    iii) Insertion at between nodes is true then

    1. Create the new node and allocate memory for the new node.

    2. Read the data in the new node.

    3. Move the current node to end position.

    4. Assign current nodes Flink =new.

    5. Assign news Blink as current.

    6. Assign news Flink as NULL.

    7. Move end pointer to new node.

    Step 4: If operation is deletion then do the following steps.

    i). Check deletion at beginning is true then.

    1. Move current pointer to start position.

    2. Move the start pointer next node in the link.

    3. Assign starts Blink as NULL.

    4. Reallocate current node from memory.

    ii) Check deletion between two nodes is true

    1. Move the current pointer to required position.

    2. Assign currents->Blink->Flink as currents Flink.

    3. Assign currentss->Flink->Blink as currents Blink.

    4. Reallocate current from memory.

  • 8/6/2019 Data Structure Lab Programs

    8/26

    iii) Check deletion at end is true

    1. Move the current pointer to end position.

    2. Assign currents->Blink->Flink as Null.

    3. Reallocate current from memory.

    4. Reallocate current from memory.

    Step 5: If the operation is traversing.

    i) Check deletion at end is true

    1. Move the current pointer to end position.

    2. Repeat the following steps until current becomes NULL.

    3. Display the data.

    4. Current=current->Flink.

    ii) If Backward traversing then

    1. Move the current to end position.

    2. Repeat the following steps until current becomes NULL.

    3. Display the data.

    4. Current=current->Flink.

    #include#include

    #include

    #include#define NULL 0

    struct linkedlist{

    int item;

    struct linkedlist *right,*left;};

  • 8/6/2019 Data Structure Lab Programs

    9/26

    typedef struct linkedlist node;

    void main(){

    node *start,*end;

    int choice;int menu(void);

    node *create(node **lastnode);

    void display(node *first,node *last);void insert(node **first,node **last);

    void del(node **first,node **last);

    clrscr();

    printf("\n DOUBLY LINKED LIST");printf("\n ******************");

    do

    {

    printf("\n\nMain menu");printf("\n\n1.Create \n2.Insert \n3.Delete \n4.Display \n5.Exit");

    choice =menu();

    switch(choice)

    {

    case 1:

    printf("\n Enter the data(-999 to stop):");

    start=create(&end);continue;

    case 2:insert(&start,&end);

    printf("\n");

    continue;

    case 3:

    del(&start,&end);

    printf("\n");continue;

    case 4:display(start,end);

    printf("\n");

    continue;

    case 5:

    exit(0);

    default:

  • 8/6/2019 Data Structure Lab Programs

    10/26

    printf("\n\nINVALID CHOICE...");

    }

    }while(1);}

    int menu(){

    int choice;

    do{

    printf("\n Enter your choice:");

    scanf("%d",&choice);

    if(choice5)printf("\n Wrong choice");

    }while(choice5);

    printf("\n");

    return(choice);}

    node *create(node **lastnode)

    {

    node *temp,*firstnode;

    int info;*lastnode=NULL;

    firstnode=NULL;

    scanf("%d",&info);while(info!=-999)

    {

    temp=(node *)malloc(sizeof(node));temp->item=info;

    temp->right=NULL;

    if(firstnode==NULL){

    temp->left=NULL;

    firstnode=temp;

    }else

    {

    temp->left=(*lastnode);(*lastnode)->right=temp;

    }

    (*lastnode)=temp;scanf("%d",&info);

    }

    if(firstnode!=NULL)

    (*lastnode)=temp;

  • 8/6/2019 Data Structure Lab Programs

    11/26

    return(firstnode);

    }

    void display(node *first,node *last)

    {

    printf("\n Forward traversal\n");while(first!=NULL)

    {

    printf("%d\t",first->item);first=first->right;

    }

    printf("\n Backward traversal\n");

    while(last!=NULL){

    printf("%d\t",last->item);

    last=last->left;

    }return;

    }

    void insert(node **first,node **last)

    {

    node *newnode;int newitem;

    int position;

    node *temp;int i;

    printf("\n New data item:");

    scanf("%d",&newitem);do

    {

    printf("\n Position of insertion:");scanf("%d",&position);

    }while(positionitem=newitem;

    newnode->right=*first;newnode->left=NULL;

    if((*first)!=NULL)

    (*first)->left=newnode;else

    (*last)=newnode;

    *first=newnode;

    }

  • 8/6/2019 Data Structure Lab Programs

    12/26

    else

    {

    i=1;temp=*first;

    while((iright!=NULL))

    {i++;

    temp=temp->right;

    }newnode=(node *)malloc(sizeof(node));

    newnode->item=newitem;

    newnode->right=temp->right;

    if(temp->right!=NULL)temp->right->left=newnode;

    newnode->left=temp;

    temp->right=newnode;

    }if(newnode->right==NULL)

    *last=newnode;}

    void del(node **first,node **last)

    {node *temp,*prev;

    int target;

    printf("\n Enter the data to be deleted:");scanf("%d",&target);

    if(*first==NULL)

    printf("\n List is empty");else if((*first)->item==target)

    {

    if((*first)->right==NULL)*first=*last=NULL;

    else

    {

    *first=(*first)->right;(*first)->left=NULL;

    }

    }else

    {

    temp=*first;prev=NULL;

    while((temp->right!=NULL)&&(temp->item!=target))

    {

    prev=temp;

  • 8/6/2019 Data Structure Lab Programs

    13/26

    temp=temp->right;

    }

    if(temp->item!=target)printf("\n Element not found");

    else

    {if(temp==*last)

    *last=prev;

    elsetemp->right->left=temp->left;

    prev->right=temp->right;

    }

    }}

    Sample Input Output:

    Main menu

    1.Create

    2.Insert

    3.Delete

    4.Display

    5.Exit

    Enter your choice:1

    Enter the data(-999 to stop):

    5

    10

    15

    -999

    Main menu

    1.Create

    2.Insert

    3.Delete

    4.Display

    5.Exit

    Enter your choice:2

    New data item:20

  • 8/6/2019 Data Structure Lab Programs

    14/26

    Position of insertion:

    Main menu

    1.Create

    2.Insert3.Delete

    4.Display

    5.Exit

    Enter your choice:4

    Forward traversal

    5 20 10 15 20

    Backward traversal

    20 15 10 20 5

    Main menu

    1.Create

    2.Insert

    3.Delete

    4.Display

    5.Exit

    Enter your choice:3

    Enter the data to be deleted:5

    Main menu

    1.Create

    2.Insert

    3.Delete

    4.Display

    5.Exit

    Enter your choice:4

    Forward traversal

    20 10 15 20

    Backward traversal

    20 15 10 20

  • 8/6/2019 Data Structure Lab Programs

    15/26

    Implementation Of Binary Search :

    Binary search:

    Definition:

    Search a sorted array by repeatedly dividing the search interval in half. Begin with an intervalcovering the whole array. If the value of the search key is less than the item in the middle ofthe interval, narrow the interval to the lower half. Otherwise narrow it to the upper half.Repeatedly check until the value is found or the interval is empty.

    Advantages:

    1. It is faster than linear search.

    2. It is astounding for large numbers.

    Disadvantages:

    1. Binary search can interact poorly with the memory hierarchy (i.e. caching), becauseof its random-access nature.

    2. Before searching the elements shorting is necessary.It take some additionaloverhead to machine.

    Analysis of the Binary sort:

    1. Worest case performance O(log n)

    2. Best case performance O(1)

    3. Average case performance O( log n)

    Algorithm steps:

    Step 1: Read the elements of the list.

    Step 2: Sort the input list.

    Step 3: Find the mid value.

    Step 4: Look at the element in the middle. If the key is equal to that, the search isfinished.

    Step 5: If the key is less than the middle element, do a binary search on the first half.

  • 8/6/2019 Data Structure Lab Programs

    16/26

    Step 6: If it's greater, do a binary search of the second half.

    #include

    #include

    void main(){

    int a[25],i,j,temp,s,n,low,mid,high;

    clrscr();printf("\nEnter the Limilt : ");

    scanf("%d",&n);

    printf("\n\nEnter the elements\n");for(i=0;i

  • 8/6/2019 Data Structure Lab Programs

    17/26

    else if(s==a[mid])

    {

    printf("\n\nThe element %d is found",s);getch();

    exit(0);

    }}

    printf("\n\nThe element %d is not found",s);

    getch();}

    SAMPLE INPUT AND OUTPUT:

    Enter the elements

    5

    43

    2

    1

    Sorted list

    1

    2

    3

    4

    5

    Enter the element to be searched : 5

    The element 5 is found.

    Conversion Of Infix Expression To Postfix Expression:

    Infix Expression:

    Notation in which the operator separates its operands. Eg (a + b) * c. Infix notation requiresthe use of brackets to specify the order of evaluation.

    Postfix Expression:

  • 8/6/2019 Data Structure Lab Programs

    18/26

    Reverse Polish Notation or Suffix Notation in which the operator follows its operands. Eg a +b * c represented as abc*+.

    Algorithm steps:

    1. Scan the Infix string from left to right.

    2. Initialize an empty stack.

    3. If the scanned character is an operand, add it to the Postfix string. If the scanned

    character is an operator and if the stack is empty push the character to stack.

    4. If the scanned character is an Operator and the stack is not empty, compare the

    precedence of the character with the element on top of the stack (top Stack). If top

    Stack has higher precedence over the scanned character pop the stack else push

    the scanned character to stack. Repeat this step as long as stack is not empty and

    top Stack has precedence over the character.

    5. Repeat this step till all the characters are scanned.

    6. After all characters are scanned, we have to add any character that the stack may

    have to the Postfix string. If stack is not empty add top Stack to Postfix string and

    Pop the stack. Repeat this step as long as stack is not empty.

    #include

    #include

    #include#include

    #include

    #define N 64#define LP 10

    #define RP 20

    #define OPERATOR 30#define OPERAND 40

    // Left parentheses precedence. Minimum of all#define LPP 0

    // Addition Subtraction precedence. Minimum among all operator precedence

    #define AP 1#define SP AP

  • 8/6/2019 Data Structure Lab Programs

    19/26

    // Multiplication divisor precedence.

    #define MP 2

    #define DP MP

    // Remainder precedence.

    #define REMP 2

    #define NONE 9

    static char infix[N+1],stack[N],postfix[N+1];

    static int top;

    void infixtopostfix(void); /** POSTFIX CONVERSION FUNCTION **/int gettype(char); /** TYPE OF EXPRESSION GENERATOR **/

    void push(char); /** PUSH FUNCTION **/

    char pop(void); /** POP FUNCTION **/

    int getprec(char); /** PRECEDENCE CHECKER FUNCTION **/

    void main(){

    char ch;

    do

    {top=-1;

    printf("\nEnter an infix expression\n");

    fflush(stdin);gets(infix);

    infixtopostfix();

    printf("\ninfix = %s\npost fix =%s\n",infix,postfix);printf("\nDo you wish to continue\n");

    ch=getche();

    }while(ch=='Y' || ch=='y');}

    void infixtopostfix(void)

    {int i,p,l,type,prec;

    char next;

    i=p=0;l=strlen(infix);

    while(i

  • 8/6/2019 Data Structure Lab Programs

    20/26

    push(infix[i]);

    break;

    case RP:while((next=pop())!='(')

    postfix[p++]=next;

    break;case OPERAND:

    postfix[p++]=infix[i];

    break;case OPERATOR:

    prec=getprec(infix[i]);

    while(top>-1 && prec -1)postfix[p++]=pop();

    postfix[p]='\0';

    }

    int gettype(char sym)

    {switch(sym)

    {

    case '(':return(LP);

    case ')':

    return(RP);case '+':

    case '-':

    case '*':

    case '/':case '%':

    return(OPERATOR);

    default :return(OPERAND);

    }

    }

    void push(char sym)

    {

    if(top>N)

  • 8/6/2019 Data Structure Lab Programs

    21/26

    {

    printf("\nStack is full\n");

    exit(0);}

    else

    stack[++top]=sym;}

    char pop(void){

    if(top

  • 8/6/2019 Data Structure Lab Programs

    22/26

    Enter any infix expression

    3*6+4*2/5

    Infix = 3*6+4*2/5

    Post fix =36*42*5/+

    Do you wish to continue

    y

    Enter an infix expression

    Implementation Of Heap Sort:

    Sorting:

    Sorting algorithm is an algorithm that puts elements of a list in a certain order . The most-used orders are numerical order and lexicographical order.

    Sorting algorithm classification:

    Computaional complexcity.

    Memory utilization

    Stability-Maintaining relative order of records with equal keys.

    No.of comparisions

    Methods applied like insertion,exchange,,selection,merging etc.

    Sorting is a process of linear ordering of list of objects

    Sorting techniques are categoried into:

    1. Internal sorting

    2. External sorting

    Internal sorting:

    It takes the place in the main memory of a computer.

    Eg: Bubble sort,Insertion sort,Shell sort,Quick sort,Heap Sort,etc

  • 8/6/2019 Data Structure Lab Programs

    23/26

    External sorting:

    It takes the place in secondary memory of a computer,Since the number of objects to bestored is too large to fit in main memory.

    Eg:Merge sort,Multiway Merge,Polyphase merge.

    Heap sort:

    Heapsort (method) is a comparison-based sorting algorithm, and is part of the selection sortfamily. Although somewhat slower in practice on most machines than a good implementationof quicksort, it has the advantage of a worst-case (n log n) runtime. Heapsort is an in-placealgorithm, but is not a stable sort.

    In heap sort the array is interpreted as a binary tree. This method has 2 phases.

    In phase 1, binary heap is constructed.

    In phase 2, delete min routine is performed.

    Analysis of the heap sort:

    Worest case performance O(n log n)

    Best case performance O(n log n)

    Average case performance O(n log n)

    Advantages of heap sort:

    1.It is efficient for sorting large number of elements.

    2.It has the advantages of worst case O(N log N) running time.Limitations:

    1. It is not a stable sort.

    2. It requires more processing time

    Alogrithm steps:

    Step1: Read the size of the list

    Step2: Read the elements of the list

    Step3: Binary heap construction.

    1) Structrue Property:

  • 8/6/2019 Data Structure Lab Programs

    24/26

    For any element in array position I,the left child is in position 2i,the right child isin 2i+1,(ie) the cell after the left child.

    2) Heap Order Property:

    The value in the parent node is smaller than or equal to the key value of any of

    its child node.Build the heap,apply the heap order propery starting from the right. most non-leaf node at the bottom level.

    Step 4: Delete min routine is performed.

    The array elements aer stored using deletemin operation,which gives the elementsarranged in descending order.

    #include

    #include

    int hsort[25],n,i;

    void adjust(int,int);

    void heapify();

    void main(){

    int temp;

    clrscr();printf("\n\t\t\t\tHEAP SORT");

    printf("\n\t\t\t\t**** ****\n\n\n");

    printf("\nenter no of elements:");scanf("%d",&n);

    printf("\nenter elements to be sorted\n\n");

    for(i=1;i=2;i--)

    {

    temp=hsort[1];hsort[1]=hsort[i];

    hsort[i]=temp;

    adjust(1,i-1);}

    printf("\nSORTED ELEMENT\n\n");

    for(i=1;i

  • 8/6/2019 Data Structure Lab Programs

    25/26

    printf("%d\n",hsort[i]);

    getch();

    }

    void heapify()

    {int i;

    for(i=n/2;i>=1;i--)

    adjust(i,n);}

    void adjust(int i,int n)

    {

    int j,element;j=2*i;

    element=hsort[i];

    while(j

  • 8/6/2019 Data Structure Lab Programs

    26/26

    3

    4

    5