Unit7 Data Structures

download Unit7 Data Structures

of 28

Transcript of Unit7 Data Structures

  • 8/2/2019 Unit7 Data Structures

    1/28

    Engaging Peers, Inspiring Careers!Engaging Peers, Inspiring Careers!

    FaaDoOFaaDoOEngineEngine

    ers.comers.comIndias No.1 website for:

    IIT-JEE/AIEEE preparation resources

    Coaching centre packages

    Engineering Major and Minor projects

    Seminar reports

    Paper presentations

    EBOOKS

    Resumes/CVs, and so much more

  • 8/2/2019 Unit7 Data Structures

    2/28

    Data Structures

    -- Data processing often involves in processing huge volumes of data. Many Companies handle millionrecords of data stored in database. Many ways are formulated to handle data efficiently.

    -- An User-defined data type is a combination of different primary data types, which represents a complex

    entity.

    -- An Abstract Data Type ( A D T ) not only represents a set of complex data objects, but also includes a setof operations to be performed on these objects, defines that how the data objects are organized.

    -- The group of methods implements a set rules, which defines a logical way of handling data.

    -- The complex entity along with its group of methods is called Abstract Data Type ( A D T ) .

    -- Data structure is described as an instance of Abstract Data Type ( ADT ).

    -- We can define that Data structure is a kind of representation of logical relationship between related data

    elements. In data structure, decision on the operations such as storage, retrieval and access must be carried

    out between the logically related data elements.

    Data Structure

    Linear Non-Linear

    Stacks Queues Trees GraphsLinear Lists

    Some Data structures

    Arrays

    Strings

    Lists

    Stacks

    Queues

    TreesGraphs

    Dictionaries

    Maps

    Hash Tables

    Sets

    Lattice

    Neural-Nets

    Some Common Operations on Data structures

    Insertion : adding a new element to the collection.

    Deletion : removing an element from a collection.

    Traversal : access and examine each element in collection.

    Search : find whether an element is present or not.

    Sorting : rearranging elements in a particular order.

    Merging : combining two collections into one collection.

  • 8/2/2019 Unit7 Data Structures

    3/28

    Arrays Linked Lists

    What is a Linked List

    The elements of a linked list are not constrained to

    be stored in adjacent locations. The individual

    elements are stored somewhere in memory, rather

    like a family dispersed, but still bound together. Theorder of the elements is maintained by explicit links

    between them.

    Limitations of Arrays

    1) Fixed in size :

    Once an array is created, the size of array

    cannot be increased or decreased.2) Wastage of space :

    If no. of elements are less, leads to wastage of

    space.

    3) Sequential Storage :

    Array elements are stored in contiguous memory

    locations. At the times it might so happen that

    enough contiguous locations might not be

    available. Even though the total space

    requirement of an array can be met through a

    combination of non-contiguous blocks of

    memory, we would still not be allowed to create

    the array.

    4) Possibility of overflow :

    If program ever needs to process more than the

    size of array, there is a possibility of overflowand code breaks.

    5) Difficulty in insertion and deletion :

    In case of insertion of a new element, each

    element after the specified location has to be

    shifted one position to the right. In case of

    deletion of an element, each element after the

    specified location has to be shifted one position

    to the left.

    The Linked List is a collection of elements called

    nodes, each node of which stores two items of

    information, i.e., data part and link field.

    -- The data part of each node consists the data

    record of an entity.

    -- The link field is a pointer and contains the address

    of next node.

    -- The beginning of the linked list is stored in apointer termed as head which points to the first node.

    -- The head pointer will be passed as a parameter

    to any method, to perform an operation.

    -- First node contains a pointer to second node,

    second node contains a pointer to the third node and

    so on.

    -- The last node in the list has its next field set toNULL to mark the end of the list.

  • 8/2/2019 Unit7 Data Structures

    4/28

    struct node {

    int rollno; struct node *next;

    };

    int main() {

    struct node *head,*n1,*n2,*n3,*n4;

    /* creating a new node */

    n1=(struct node *) malloc(sizeof(struct node));n1->rollno=101;

    n1->next = NULL;

    /* referencing the first node to head pointer */

    head = n1;

    /* creating a new node */

    n2=(struct node *)malloc(sizeof(struct node));

    n2->rollno=102;

    n2->next = NULL; /* linking the second node after first node */

    n1->next = n2;

    /* creating a new node * /

    n3=(struct node *)malloc(sizeof(struct node));

    n3->rollno=104;

    n3->next=NULL;

    /* linking the third node after second node */n2->next = n3;

    /* creating a new node */

    n4=(struct node *)malloc (sizeof (struct node));

    n4->rollno=103;

    n4->next=NULL;

    /* inserting the new node between

    second node and third node */

    n2->next = n4;n4->next = n3;

    /* deleting n2 node */

    n1->next = n4;

    free(n2);

    }

    Creating a Singly Linked List

    150

    head

    101 400

    150

    102 720

    400103 910

    720

    104 NULL

    910n1-node n2-node

    n4-node

    n3-node

    101 NULL

    150 n1-node

    150

    head

    150 101 720

    150n1-node

    102 NULL

    n2-node720

    150 101 720

    150n1-node

    102 910

    n2-node720

    104 NULL

    910n3-node

    150

    head

    101 720

    150

    102 720

    400

    103 910

    720

    104 NULL

    910

    n1-node

    n2-node

    n4-noden3-node

  • 8/2/2019 Unit7 Data Structures

    5/28

    struct node {

    int data;

    struct node *next;

    };

    struct node *createnode() {

    struct node *new;

    new = (struct node *)malloc(sizeof(struct node));

    printf("\nEnter the data : ");

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

    new->next = NULL;

    return new;

    }void append(struct node **h) {

    struct node *new,*temp;

    new = createnode();

    if(*h == NULL) {

    *h = new;

    return;

    }

    temp = *h;while(temp->next!=NULL) temp = temp->next;

    temp->next = new;

    }

    void display(struct node *p) {

    printf("\nContents of the List : \n\n");

    while(p!=NULL) {

    printf("\t%d",p->data);p = p->next;

    }

    }

    void insert_after(struct node **h) {

    struct node *new,*temp; int k;

    if(*h == NULL) return;

    printf("\nEnter data of node after which node : ");

    scanf("%d",&k);

    temp = *h;

    while(temp!=NULL && temp->data!=k)

    temp = temp->next;

    if(temp!=NULL) {

    new=createnode();new->next = temp->next;

    temp->next = new;

    }

    }

    void insert_before(struct node **h) {

    struct node *new,*temp,*prev ;

    int k;

    if(*h==NULL) return;printf("\nEnter data of node before which node : ");

    scanf("%d",&k);

    if((*h)->data == k) {

    new = createnode();

    new->next = *h;

    *h = new; return;

    }temp = (*h)->next; prev = *h;

    Implementing Singly Linked List

  • 8/2/2019 Unit7 Data Structures

    6/28

    while(temp!=NULL && temp->data!=k) {

    prev=temp;

    temp=temp->next;

    }

    if(temp!=NULL) {new = createnode();

    new->next = temp;

    prev->next = new;

    }

    }

    void delnode(struct node **h) {

    struct node *temp,*prev;int k;

    if(*h==NULL) return;

    printf("\nEnter the data of node to be removed : ");

    scanf("%d",&k);

    if((*h)->data==k) {

    temp=*h;

    *h=(*h)->next;

    free(temp);return;

    }

    temp=(*h)->next;

    prev=*h;

    while(temp!=NULL && temp->data!=k) {

    prev=temp;

    temp=temp->next;}

    if(temp!=NULL) {

    prev->next = temp->next;

    free(temp);

    }

    }void search(struct node *h) {

    struct node *temp;

    int k;

    if(h==NULL)return;

    printf("\nEnter the data to be searched : ");

    scanf("%d",&k);

    temp=h;while(temp!=NULL && temp->data!=k)

    temp=temp->next;

    (temp==NULL)?

    printf("\n\t=>Node does not exist") :

    printf("\n\t=>Node exists");

    }

    void destroy(struct node **h) {

    struct node *p;if(*h==NULL) return;

    while(*h!=NULL) {

    p = (*h)->next;

    free(*h);

    *h=p;

    }

    printf("\n\n ******Linked List is destroyed******");}

    Implementing Singly Linked List ( continued )

  • 8/2/2019 Unit7 Data Structures

    7/28

    int main() {

    struct node *head=NULL;

    int ch;

    while(1) {

    printf("\n1.Append");printf("\n2.Display All");

    printf("\n3.Insert after a specified node");

    printf("\n4.Insert before a specified node");

    printf("\n5.Delete a node");

    printf("\n6.Search for a node");

    printf("\n7.Distroy the list");

    printf("\n8.Exit program");printf("\n\n\tEnter your choice : ");

    scanf("%d",&ch);

    switch(ch) {

    case 1:append(&head);break;

    case 2:display(head);break;

    case 3:insert_after(&head);break;

    case 4:insert_before(&head);break;

    case 5:delnode(&head);break;case 6:search(head);break;

    case 7:destroy(&head);break;

    case 8:exit(0);break;

    default :

    printf( "Wrong Choice, Enter correct one : ");

    }

    }

    }

    /* function to sort linked list */

    void sort(struct node *h) {

    struct node *p,*temp;

    int i, j, n, t, sorted=0;

    temp=h;for(n=0 ; temp!=NULL ; temp=temp->next) n++;

    for(i=0;i ( p->next )->data ) {

    t=p->data;

    p->data =(p->next)->data;(p->next)->data = t;

    sorted=0;

    }

    p=p->next;

    }

    }

    }

    /* function to count number of node in the list */

    int count ( struct node *h)

    {

    int i;

    for( i=0 ; h!=NULL ; h=h->next)

    i++;

    return i;

    }

    Implementing Singly Linked List ( continued )

  • 8/2/2019 Unit7 Data Structures

    8/28

    Add_Polynomial( list p, list q )

    set p, q to point to the two first nodes (no headers)

    initialize a linked list r for a zero polynomialwhile p != null and q != null

    if p.exp > q.exp

    create a node storing p.coeff and p.exp

    insert at the end of list r

    advance p

    else if q.exp > p.exp

    create a node storing q.coeff and q.expinsert at the end of list r

    advance q

    else if p.exp == q.exp

    if p.coeff + q.coeff != 0

    create a node storing p.coeff + q.coeff and p.exp

    insert at the end of list radvance p, q

    end while

    if p != null

    copy the remaining terms of p to end of r

    else if q != null

    copy the remaining terms of q to end of r

    Algorithm for adding two polynomials in linked lists

  • 8/2/2019 Unit7 Data Structures

    9/28

    Pitfalls encountered while using singly linked list :

    1) A singly linked list allows traversal of the list in forward direction, but not in backward direction.

    2) Deleting a node from a list requires keeping track of the previous node,.

    3) In the list any node gets corrupted, the remaining nodes of the list become unusable.

    These problems of singly linked lists can be overcome by doubly linked list.

    Doubly Linked List

    A Doubly Linked List is a data structure having an ordered list of nodes, in which each node consists

    of two pointers. One pointer is to store the address of next node like in singly linked list. The second

    pointer stores the address of previous node. It is also known as two-way list.

    The specialty of DLL is that the list can be traversed in forward as well as backward directions.

    The concept of DLL is also used to representing tree data structures.

    A B C

    head tail

    /* a node in doubly linked list */struct node

    {

    struct node *prev;

    int data ;

    struct node *next;

    }

    Tree structure using Doubly Linked List

  • 8/2/2019 Unit7 Data Structures

    10/28

    A B C D

    A B D

    C

    q

    p q

    A B C

    D

    p

    A B C

    Insertion of node in Doubly Linked List

    Deletion of node in Doubly Linked List

  • 8/2/2019 Unit7 Data Structures

    11/28

    struct node {

    struct node *prev;

    int data;

    struct node *next;

    };struct node *createnode() {

    struct node *new;

    new = (struct node *)malloc(sizeof(struct node));

    printf("\nEnter the data : ");

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

    new->prev = NULL;

    new->next = NULL;return new;

    }

    void append(struct node **h) {

    struct node *new,*temp;

    new = createnode();

    if(*h == NULL)

    {

    *h = new;return;

    }

    temp = *h;

    while(temp->next!=NULL)

    temp = temp->next;

    temp->next = new;

    new->prev = temp;

    }

    void forward_display(struct node *p)

    {

    printf("\nContents of the List : \n\n");

    while(p!=NULL)

    {printf("\t%d",p->data);

    p = p->next;

    }

    printf("\n");

    }

    void insert_after(struct node **h) {

    struct node *new,*temp;int k;

    if(*h == NULL) return;

    printf("\nEnter data of node after which node : ");

    scanf("%d",&k);

    temp = *h;

    while(temp!=NULL && temp->data!=k)

    temp = temp->next;

    if(temp!=NULL) {new=createnode();

    new->next = temp->next;

    temp->next = new;

    new->prev = temp;

    if(new->next != NULL)

    new->next->prev = new;

    }

    }

    Implementing Doubly Linked List

  • 8/2/2019 Unit7 Data Structures

    12/28

    void insert_before(struct node **h)

    {

    struct node *new,*temp;

    int k;

    if(*h==NULL) return;printf("\nEnter data of node before which node : ");

    scanf("%d",&k);

    if((*h)->data == k) {

    new = createnode();

    new->next = *h;

    new->next->prev=new;

    *h = new;

    return;

    }

    temp = *h;

    while(temp!=NULL && temp->data!=k)

    {

    temp=temp->next;

    }

    if(temp!=NULL){

    new = createnode();

    new->next = temp;

    new->prev = temp->prev;

    new->prev->next = new;

    temp->prev = new;

    }

    }

    void delnode(struct node **h)

    {

    struct node *temp;

    int k;

    if(*h==NULL)return;

    printf("\nEnter the data of node to be removed : ");

    scanf("%d",&k);

    if((*h)->data==k)

    {

    temp=*h;

    *h=(*h)->next;

    (*h)->prev=NULL;

    free(temp);

    return;

    }

    temp=*h;

    while(temp!=NULL && temp->data!=k)

    {

    temp=temp->next;}

    if(temp!=NULL)

    {

    temp->next->prev = temp->prev;

    temp->prev->next = temp->next;

    free(temp);

    }

    }

    Implementing Doubly Linked List ( continued )

  • 8/2/2019 Unit7 Data Structures

    13/28

    void search(struct node *h)

    {

    struct node *temp;

    int k;

    if(h==NULL)return;

    printf("\nEnter the data to be searched : ");

    scanf("%d",&k);

    temp=h;

    while(temp!=NULL && temp->data!=k)

    temp=temp->next;

    if (temp==NULL)

    printf("\n\t=>Node does not exist")

    else

    printf("\n\t=>Node exists");

    }

    void destroy(struct node **h)

    {

    struct node *p;

    if(*h==NULL) return;while(*h!=NULL)

    {

    p = (*h)->next;

    free(*h);

    *h=p;

    }

    printf("\n\n ******Linked List is destroyed******");

    }

    int main() {

    struct node *head=NULL;

    int ch;

    while(1) {

    printf("\n1.Append");printf("\n2.Display All");

    printf("\n3.Insert after a specified node");

    printf("\n4.Insert before a specified node");

    printf("\n5.Delete a node");

    printf("\n6.Search for a node");

    printf("\n7.Distroy the list");

    printf("\n8.Exit program");

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

    scanf("%d",&ch);

    switch(ch) {

    case 1:append(&head);break;

    case 2:forward_display(head);break;

    case 3:insert_after(&head);break;

    case 4:insert_before(&head);break;

    case 5:delnode(&head);break;case 6:search(head);break;

    case 7:destroy(&head);break;

    case 8:exit(0);break;

    default :

    printf("Wrong Choice, Enter correct choice : ");

    }

    }

    }

    Implementing Doubly Linked List ( continued )

  • 8/2/2019 Unit7 Data Structures

    14/28

    Circular Singly

    Linked List

    910

    tail101 400

    150

    102 720

    400

    103 910

    720

    104 150

    910

    n1-node n2-node n3-node n4-node

    -- Singly Linked List has a major drawback. From a specified node, it is not possible to reach any of the

    preceding nodes in the list. To overcome the drawback, a small change is made to the SLL so that the nextfield of the last node is pointing to the first node rather than NULL. Such a linked list is called a circular

    linked list.

    -- Because it is a circular linked list, it is possible to reach any node in the list from a particular node.

    -- There is no natural first node or last node because by virtue of the list is circular.

    -- Therefore, one convention is to let the external pointer of the circular linked list, tail, point to the last

    node and to allow the following node to be the first node.

    -- If the tail pointer refers to NULL, means the circular linked list is empty.

    Circular Doubly Linked List

    prev data next prev data next prev data next prev data next

    -- A Circular Doubly Linked List ( CDL ) is a doubly linked list with first node linked to last node and vice-

    versa.

    -- The prev link of first node contains the address of last node and next link of last node contains the

    address of first node.

    -- Traversal through Circular Singly Linked List is possible only in one direction.

    -- The main advantage of Circular Doubly Linked List ( CDL ) is that, a node can be inserted into list

    without searching the complete list for finding the address of previous node.

    -- We can also traversed through CDL in both directions, from first node to last node and vice-versa.

  • 8/2/2019 Unit7 Data Structures

    15/28

    void insert_after(struct node **t)

    {

    struct node *new,*temp;

    int k, found=0;

    if(*t == NULL) return;

    printf("\nEnter data of node after which node : ");

    scanf("%d",&k);

    if((*t)->data==k)

    {

    new = createnode();

    new->next = (*t)->next;

    (*t)->next = new;

    *t=new;return;

    }

    temp=(*t)->next;

    while(temp!=*t)

    {

    if(temp->data == k) {

    new = createnode();

    new->next = temp->next;

    temp->next = new;

    found=1;

    break;

    }

    temp=temp->next;

    }

    if(found==0) printf("\nNode does not exist..");}

    Implementing Circular Singly Linked List

    struct node {

    int data; struct node *next;

    };

    struct node *createnode() {

    struct node *new;

    new = (struct node *)malloc(sizeof(struct node));

    printf("\nEnter the data : ");

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

    new->next = NULL;

    return new;

    }

    void append(struct node **t) {

    struct node *new,*head;new = createnode();

    if(*t == NULL) {

    *t = new; new->next = *t;

    return;

    }

    head = (*t)->next; (*t)->next = new;

    new->next = head; *t = new;

    }

    void display(struct node *t) {

    struct node *temp = t->next, *head=t->next;

    printf("\nContents of the List : \n\n");

    do {

    printf("\t%d",temp->data);temp = temp->next;

    }while(temp!=head);

    printf(\n);}

  • 8/2/2019 Unit7 Data Structures

    16/28

    void insert_before(struct node **t) {

    struct node *new,*temp,*prev,*head;

    int k,found=0;

    if(*t==NULL) return;

    printf("\nEnter data of node before which node : ");

    scanf("%d",&k);

    head=(*t)->next;

    if(head->data == k) {

    new = createnode();

    new->next = head;

    (*t)->next = new;

    return;

    }temp = head->next;

    prev = head;

    while(temp!=head) {

    if(temp->data==k) {

    new = createnode();

    prev->next = new;

    new->next = temp;

    found=1;

    break;

    } else {

    prev=temp;

    temp=temp->next;

    }

    }

    if(found==0) printf("\nNode does not exist..");}

    void delnode(struct node **t) {

    struct node *temp,*prev,*head;

    int k,found=0;

    if(*t==NULL) return;

    printf("\nEnter the data of node to be removed : ");

    scanf("%d",&k);

    head=(*t)->next;

    if(head->data==k) {

    temp=head;

    if(temp->next!=head) (*t)->next=head->next;

    else *t = NULL;

    free(temp);

    return;}

    temp=head->next; prev=head;

    while(temp!=head) {

    if(temp->data == k) {

    prev->next = temp->next;

    if(temp==*t) *t = prev;

    free(temp);

    found=1;

    break;

    } else {

    prev=temp;

    temp=temp->next;

    }

    }

    if(found==0) printf("\nNode does not exist..");}

    Implementing Circular Singly Linked List ( continued )

  • 8/2/2019 Unit7 Data Structures

    17/28

    int main() {

    struct node *tail=NULL;int ch;

    while(1) {

    printf("\n1.Append");

    printf("\n2.Display All");

    printf("\n3.Insert after a specified node");

    printf("\n4.Insert before a specified node");

    printf("\n5.Delete a node");

    printf("\n6.Exit program");

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

    scanf("%d",&ch);

    switch(ch)

    {

    case 1:append(&tail);break;

    case 2:display(tail);break;

    case 3:insert_after(&tail);break;case 4:insert_before(&tail);break;

    case 5:delnode(&tail);break;

    case 6:exit(0);break;

    default :

    printf(\n\tWrong Choice );

    }

    }

    }

    Implementing Circular Singly

    Linked List ( continued )

    Data structures are classified in several ways :

    Linear : Elements are arranged in sequential

    fashion. Ex : Array, Linear list, stack, queue

    Non-Linear : Elements are not arranged in

    sequence. Ex : trees, graphsHomogenous : All Elements are belongs to same

    data type. Ex : Arrays

    Non-Homogenous : Different types of Elements

    are grouped and form a data structure. Ex:

    classes

    Dynamic : Memory allocation of each element in

    the data structure is done before their usage

    using D.M.A functions Ex : Linked ListsStatic : All elements of a data structure are created

    at the beginning of the program. They cannot be

    resized. Ex : Arrays

    Types of Data Structures

  • 8/2/2019 Unit7 Data Structures

    18/28

    Stacks

    -- Stack is an ordered collection of data elements into which new elements may be inserted and fromwhich elements may be deleted at one end called the TOP of stack.

    -- A stack is a last-in-first-out ( LIFO ) structure.

    -- Insertion operation is referred as PUSH and deletion operation is referred as POP.

    -- The most accessible element in the stack is the element at the position TOP.-- Stack must be created as empty.

    -- Whenever an element is pushed into stack, it must be checked whether the stack is full or not.

    -- Whenever an element is popped form stack, it must be checked whether the stack is empty or not.

    -- We can implement the stack ADT either with array or linked list.

    Applications of stack

    Reversing Data series Conversion decimal to binary Parsing into tokens Backtracking the operations Undo operations in Text Editor Page visited History in web browser

    Tracking of Function calls Maintaining scope and lifetime of local

    variables in functions Infix to postfix conversion Evaluating postfix expression

    Stack ADT

    struct stackNode {int data; struct stackNode *next;

    }; init_stack( ) push ( ) pop ( ) isEmpty ( ) display ( )

    peek ( )

  • 8/2/2019 Unit7 Data Structures

    19/28

    OperationOperation Stacks contentsStacks contents TOP valueTOP value

    1. Init_stack( )1. Init_stack( ) -1 -12. Push( a )2. Push( a ) aa 00

    3. Push( b )3. Push( b ) a ba b 11

    4. Push( c )4. Push( c ) a b ca b c 22

    5. Pop( )5. Pop( ) a ba b 116. Push( d )6. Push( d ) a b da b d 22

    7. Push( e )7. Push( e ) a b d ea b d e 33

    8. Pop( )8. Pop( ) a b da b d 22

    9. Pop( )9. Pop( ) a ba b 11

    10. Pop( )10. Pop( ) aa 00

    11. Pop( )11. Pop( ) -1-1

    OutputOutput

    cccc

    cc

    c ec e

    c e dc e d

    c e d bc e d bc e d b ac e d b a

    a a

    b

    d

    e

    a

    b

    a

    b

    c

    a

    b

    a

    b

    d

    a

    b

    d

    a

    b

    a

    Push(a) Push(b) Push(c) Pop( ) Push(d) Push(e) Pop( ) Pop( ) Pop( ) Pop( )

    Operations on Stack

  • 8/2/2019 Unit7 Data Structures

    20/28

    #define SIZE 50

    int stack[SIZE]; int top;

    void init_stack() {

    top=-1;

    }

    void push( int n ) {

    if( top==SIZE-1) printf("\nStack is full");

    else stack[++top]= n;

    }

    int pop( ) {

    if(top== -1) {

    printf("\nStack is empty");

    return -1;} else return stack[top--];

    }

    void display( ) {

    int i;

    if(top== -1) printf("\nStack is empty.");

    else {

    printf("\nElements are : \n");

    for(i=0;i

  • 8/2/2019 Unit7 Data Structures

    21/28

    struct s_node {

    int data;

    struct s_node *link;

    } *stack;

    void push(int j) {

    struct s_node *m;

    m=(struct s_node*)malloc(sizeof(struct s_node));

    m->data= j ; m->link=stack;

    stack=m; return;

    }

    int pop( ) {

    struct s_node *temp=NULL;

    if(stack==NULL) {printf("\nSTACK is Empty."); getch();

    } else {

    int i=stack->data;

    temp = stack ; stack=stack->link;

    free(temp); return (i);

    }

    }

    int peek( ) {

    if(stack==NULL) {

    printf("\nSTACK is Empty."); getch();

    } else

    return (stack->data);

    }

    void display() {

    struct s_node *temp=stack;

    while(temp!=NULL) {

    printf("%d\t",temp->data);

    temp=temp->link;

    }

    }

    void main() {

    int choice,num,i;

    while(1) {

    printf("\n\t\t MENU\n1. Push\n2. Pop\n3. Peek");

    printf("\n4. Elements in Stack\n5. Exit\n");

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

    scanf("%d",&choice);

    switch(choice) {case 1: printf("\nElement to be pushed:");

    scanf("%d",&num);

    push(num); break;

    case 2: num=pop();

    printf("\nElement popped: %d ",num);

    getch(); break;

    case 3: num=peek();

    printf("\nElement peeked : %d ",num);

    getch(); break;

    case 4: printf("\nElements present in stack : ):

    display();getch(); break;

    case 5: exit(1);

    default: printf("\nInvalid Choice\n"); break;

    }

    }}

    Implementing Stack ADT using Linked List

    Q

  • 8/2/2019 Unit7 Data Structures

    22/28

    Queues

    -- Queue is a linear data structure that permits insertion of new element at one end and deletion of anelement at the other end.

    -- The end at which insertion of a new element can take place is called rear and the end at which

    deletion of an element take place is called front .

    -- The first element that gets added into queue is the first one to get removed from the list, Hence Queueis also referred to as First-In-First-Out ( FIFO ) list.

    -- Queue must be created as empty.

    -- Whenever an element is inserted into queue, it must be checked whether the queue is full or not.

    -- Whenever an element is deleted form queue, it must be checked whether the queue is empty or not.

    -- We can implement the queue ADT either with array or linked list.

    Queue ADT

    struct queueNode {

    int data; struct queueNode *next;

    }; init_queue( ) addq ( ) delq ( ) isEmpty ( )

    printQueue ( )

    Types of Queues

    circular queues priority queues double-ended queues

    3 6 8 2 5

    4

    addq (4) delq ( )

    rear front

    7

    Applications of Queues

    Execution of Threads Job Scheduling Event queuing Message Queueing

  • 8/2/2019 Unit7 Data Structures

    23/28

    int queue[10] ,front, rear ;

    void init_queue() {

    front = rear = -1 ;

    }

    void addq ( int item ){

    if ( rear == 9 ) {

    printf("\nQueue is full");

    return ;

    }

    rear++ ;

    queue [ rear ] = item ;

    if ( front == -1 )front = 0 ;

    }int delq( ){

    int data ;

    if ( front == -1 ) {

    printf("\nQueue is Empty");

    return 0;

    }

    data = queue[front] ;

    queue[front] = 0 ;

    if ( front == rear ) front = rear = -1 ;

    else front++ ;

    return data ;

    }

    void display() {

    int i;

    if(front==-1) printf("\nQueue is empty.");else {

    printf("\nElements are : \n");

    for (i=front;i

  • 8/2/2019 Unit7 Data Structures

    24/28

    struct q_node {

    int data; struct q_node *next;

    }*rear,*front;

    void init_queue() {

    rear=NULL; front=NULL;}

    void addq(int item) {

    struct q_node *t;

    t=(struct q_node*)malloc(sizeof(struct q_node));

    t->data=item; t->next=NULL;

    if(front==NULL) rear=front=t;

    else {

    rear->next=t; rear=rear->next;}

    }

    int delq() {

    struct q_node *temp;

    if(front==NULL) {

    printf("\nQueue is empty."); return 0;

    } else {int num = front->data;

    temp = front; front=front->next;

    free(temp); return num;

    }

    }

    void display() {

    struct q_node *temp=front;

    if(front==NULL) printf("\nQueue is empty.");

    else {

    printf("\nElements in Queue :\n");

    while(temp!=NULL) {

    printf("%5d",temp->data);

    temp=temp->next;}

    }

    }

    int main() {

    int ch,num;

    init_queue();

    do {

    printf("\n\tMENU\n\n1. Add\n2. Delete");printf("\n3. Display Queue\n4. Exit.");

    printf("\n\n\tYour Choice: ");

    scanf("%d",&ch);

    switch(ch) {

    case 1: printf("\nEnter an element : ");

    scanf("%d",&num);

    addq(num);break;case 2: num=delq();

    printf("\nElement deleted : %d",num); break;

    case 3: display(); break;

    case 4: exit(0);

    default:printf("\nInvalid option..");

    }

    }while(1);

    }

    Implementing Queue ADT using Liked List

  • 8/2/2019 Unit7 Data Structures

    25/28

    Algorithm to Infix to Postfix Conversion

    --Arithmetic Expressions are represented using three notations infix, prefix and postfix. The prefixespre, post, and in refer to position of operators with respect to two operands.

    -- In infix notation, the operator is placed between the two operands.

    Ex: A + B A * B + C (A * B) + (C * D)

    -- In Prefix notation, the operator is placed before the two operands.

    Ex: +AB *A+BC +*AB*CD

    -- In Postfix notation, the operator is placed after the two operands.Ex: AB+ ABC+* AB*CD*+

    In-To-Post ( infix-expression )

    Scan the Infix expression left to right

    If the character x is an operandOutput the character into the Postfix Expression

    If the character xis a left or right parenthesis

    If the character is (

    Push it into the stack

    If the characteris )

    Repeatedly pop and output all the operators/characters until ( is popped from the stack.

    If the character x is a is a regular operator

    Check the character y currently at the top of the stack.

    If Stack is empty or y is ( or y is an operator oflower precedence than x, then

    Push x into stack.

    If y is an operator ofhigher or equal precedence than x,

    Pop and output y and push x into the stack.

    When all characters in infix expression are processed

    repeatedly pop the character(s) from the stack and output them until the stack is empty.

    I Fi T P t Fi ti

  • 8/2/2019 Unit7 Data Structures

    26/28

    #define STACKSIZE 20

    typedef struct {

    int top; char items[STACKSIZE];

    }STACK;

    /*pushes ps into stack*/

    void push(STACK *sptr, char ps) {

    if(sptr->top == STACKSIZE-1) {

    printf("Stack is full\n"); exit(1);

    } else

    sptr->items[++sptr->top]= ps;

    }

    char pop(STACK *sptr) {

    if(sptr->top == -1) {printf("Stack is empty\n"); exit(1);

    } else

    return sptr->items[sptr->top--];

    }

    int main() {

    int i; STACK s; char x, y, E[20] ;

    s.top = -1; /* Initialize the stack is */

    printf("Enter the Infix Expression:");scanf("%s",E);

    for(i=0;E[i] != '\0';i++) {

    x= E[i];

    /* Consider all lowercase letter

    from a to z are operands */

    if(x='a') printf("%c",x);

    else if(x == '(') push(&s ,x);else if( x == ') ){

    y=pop(&s) ;

    while(y != '(') {

    printf("%c",y);

    y=pop(&s) ;

    }

    } else {

    if(s.top ==-1 || s.items[s.top] == '(')

    push(&s ,x);

    else {

    /* y is the top operator in the stack*/

    y = s.items[s.top];

    /* precedence of y is higher/equal to x*/

    if( y=='*' || y=='/'){printf("%c", pop(&s));

    push(&s ,x);

    } else if ( y=='+' || y=='-')

    /* precedence of y is equal to x*/

    if( x=='+' || x=='-') {

    printf("%c", pop(&s));

    push(&s ,x);

    }

    /* precedence of y is less than x*/

    else

    push(&s ,x);

    }

    }

    }

    while(s.top != -1) printf("%c",pop(&s));}

    In-Fix To Post-Fix convertion

    E l ti f P t Fi E i

  • 8/2/2019 Unit7 Data Structures

    27/28

    #include

    #include

    #include

    float stack[10];

    int top=-1;

    void push(char c)

    {

    stack[++top]=c;

    }

    float pop() {

    float n;

    n=stack[top--];

    return (n);}

    float evaluate(char expr[], float data[])

    {

    int j=0;

    float op1=0,op2=0;

    char ch;

    while(expr[j]!='\0') {

    ch = expr[j];if(isalpha(expr[j])) {

    push(data[j]);

    } else {

    op2=pop();

    op1=pop();

    switch(ch) {

    case '+':push(op1+op2);break;case '-':push(op1-op2);break;

    case '*':push(op1*op2);break;

    case '/':push(op1/op2);break;

    case '^':push(pow(op1,op2));

    break;

    }

    }

    j++;

    }

    return pop();

    }

    int main() {

    int j=0;

    char expr[20];float number[20],result;

    printf("\nEnter a post fix expression : ");

    gets(expr);

    while(expr[j]!='\0')

    {

    if(isalpha(expr[j]))

    {

    fflush(stdin);

    printf("\nEnter number for %c : ",expr[j]);

    scanf("%f",&number[j]);

    }

    j++;

    }

    result = evaluate(expr,number);

    printf("\nThe result of %s is %f",expr,result);}

    Evaluation of Post-Fix Expression

  • 8/2/2019 Unit7 Data Structures

    28/28

    Engaging Peers, Inspiring Careers!Engaging Peers, Inspiring Careers!

    FaaDoOFaaDoOEngineEngine

    ers.comers.comIndias No.1 website for:

    IIT-JEE/AIEEE preparation resources

    Coaching centre packages

    Engineering Major and Minor projects

    Seminar reports

    Paper presentations

    EBOOKS

    Resumes/CVs, and so much more