data structures (ds) arrays, stacks & queues courtesy : goutam m v

161
DATA STRUCTURES (DS) Arrays, Stacks & Queues Courtesy : Goutam M V

Upload: maximillian-green

Post on 26-Dec-2015

220 views

Category:

Documents


2 download

TRANSCRIPT

  • Slide 1
  • DATA STRUCTURES (DS) Arrays, Stacks & Queues Courtesy : Goutam M V
  • Slide 2
  • Arrays Data Structures: Logical method of representing data in memory. Two types 1. Simple data structures : built from fundamental data types. Eg: Array, Structure 2. Compound data structure : formed by using simple data types and are more complex. Two types
  • Slide 3
  • 1. Linear DS :Single level DS, having elements in sequence Eg: Stack, Queue, Linked list 2. Non-linear DS : multilevel DS Eg: Tree, Graph
  • Slide 4
  • Array: Collection of homogeneous(same type) data elements, which are stored in a linear fashion in memory,also called linear DS. Structure: Collection of logically related fields, may be of same or different types.
  • Slide 5
  • Stack: List (Linear DS) in which all insertions and deletions are performed at one end (Top). Push: Insertion operation Pop : Deletion operation Information processing : LIFO (Last In First Out) order. Eg: Pile of books
  • Slide 6
  • Queue: List (Linear DS) in which insertion and deletion at two ends Front : Deletion Rear : Insertion Info Processing : FIFO (First In First Out) or First Come First Served (FCFS) Eg: Queue in a railway reservation counter
  • Slide 7
  • Linked list: Linear collection of nodes, Last node contain null pointer. First or Start It is a dynamic data structure
  • Slide 8
  • Non Linear DS Tree: Non-linear collection of nodes having specially designated node called root, represented as an upside down(root on top) Binary tree: Special class of tree, each node except root cant have more than two nodes
  • Slide 9
  • Graph: Set of nodes (vertices) and set of arcs (edges),where arc specified by pair of nodes. Directed graph (diagraph): if arcs are ordered pairs.
  • Slide 10
  • Array Array name also called subscripted variable Two types: One-dimensional arrays Multi-dimensional arrays One-dimensional array: Syntax: type variable_name [size];
  • Slide 11
  • Eg: int arr [10]; Representation: LB : Lower bound UB : Upper bound One dimensional array uses sequential allocation of memory technique
  • Slide 12
  • Address Calculation - 1D &2D !!!!!!!
  • Slide 13
  • Address calculation (i th element) Address of arr [i] = B + (i - LB) * S B : Base address or starting address S : Size of the element in an array arr [LB:UB] i: array element Question:
  • Slide 14
  • Multidimensional array (Two dimensional) Having both rows and columns, in which each element is specified by two subscripts. Eg: int a [m] [n]; -> is an m by n (m*n) table having m rows and n columns Size of array = m*n Syntax: type variable_name [no. of rows] [no of columns];
  • Slide 15
  • Sequential allocation of two dimensional array Since comp memory is linear,2D array stored using either Row major storage Column major storage Using Row major storage Address of a [i] [j] = B + [(i-LB1) * N + (j-LB2)]*S
  • Slide 16
  • Column major storage Address of a [i] [j] = B + [(i-LB1)+(j-LB2)*M]*S
  • Slide 17
  • One dimensional Array Traversal : Visiting each element one after other from start to end. Eg: a [5]; Algorithm for traversal A be an array of size N. Traversal denoted by OPERATE. I denotes index. Assume LB starts with 1. 1. Repeat for I=1,2,,N OPERATE on A[I] 2. End
  • Slide 18
  • Traversal of 1D array //find sum of n integers #define S 20 //array size void main(){ int sum (int [],int);//function prototype int a[s],n,i;//variables declared coutHIGH.
  • Slide 25
  • Algorithm 1. LOW=1 HIGH=N 2. Repeat while ( LOW A[MID]) Then LOW=MID+1 else HIGH=MID-1} 5. Write(Unsuccessful search) 6. End
  • Slide 26
  • Array in descending order 1.LOW=1 HGH=N 2. Repeat while (LOWA [MID]) Then HIGH=MID-1 else LOW=MID+1} 5. Write (Unsuccessful search) 6.End
  • Slide 27
  • Insertion of an element in an array A be an array of size N, having M elements (M
  • Algorithm 1. If (DATA>=A [M]) Then { A [M+1] = DATA go to step 6} 2. POS=1 3. Repeat while (A [POS] DATA) Then{ write(DATA, Cant be deleted) go to step 3 } else{ if ( A[I] = DATA ) Then { Repeat for POS = I+1,I+2,,N{ A[ POS-1 ] = A[ POS ]} A[ N ] = 0 N = N - 1go to step 3}}} 3.End
  • Slide 37
  • Sorting Arranging the elements in some specific order, ie either ascending or descending order. Various sorting techniques are Insertion sort Selection sort Bubble sort or Exchange sort Quick sort, Shell sort, Merge sort, Heap sort
  • Slide 38
  • Insertion sort A be an array having N elements A[0],A[1],A [N-1].Initially first element is assumed to be sorted. In first pass a[1] is inserted to its proper place in sorted part of the array. CURRENT : element to be placed during each pass. POS is used for finding the appropriate position of CURRENT among the element above it. I, J denotes array indices.
  • Slide 39
  • Algorithm 1. Repeat for I = 2,3,.,N up to step 5 2. CURRENT = A [I] 3. POS = 1 4. Repeat while ((POS < I) AND (A [POS
  • Algorithm 1. LAST = N 2. Repeat for PASS = 1,2,..,N-1 upto step 5 3. EXCHS = 0 4. Repeat for I= 1,2,.,LAST 1{ If (A [I]> A [I+1] ) Then{ TEMP = A [I] A [I] = A [I+1] A [I+1] = TEMP EXCHS = EXCHS + 1} } 5. If (EXCHS = 0) Then goto step 6 Else LAST + LAST -1 6. End
  • Slide 44
  • Concatenation of two linear arrays Joining the elements of two arrays to form a new array. First copy all the elements of one array into new array and then copy other array elements to new array. Size of new array will be the sum of two arrays.
  • Slide 45
  • Algorithm A and B be two arrays of size M and N respectively. Concatenate A and B into array C of size M+N. I denotes array index. 1. Repeat for I = 1,2,..,M C [I] = A [I] 2. Repeat for I = 1,2,.,N C [M + I ] = B [I] 3.End
  • Slide 46
  • Merging of two sorted arrays Process of combining two or more sorted arrays into another array which is also sorted. We have two techniques Concatenate two arrays and then sort using any sorting algorithm Merge sort : Sorting while merging. Using this efficiency increases
  • Slide 47
  • Algorithm A, B be two arrays of size M and N respectively having elements in ascending order. We merge these two to C of size M+N,ascending order. I,J, K and R denotes array indices.
  • Slide 48
  • 1. I =1,J = 1, K = 1 2. Repeat while (( I
  • 1. I =1,J = N, K = 1 2. Repeat while (( I = 1)) { If (A [I] M)Then{ Repeat for R = J,J-1,.,1 { C [ K ] = B [ R ] K=K+1}} else { Repeat for R = I,I+1,.,M { C [K]= A [R] K=K+1}} 4. End
  • Slide 51
  • Two dimensional arrays Traversal : A be an array of size M * N. We have to traverse and perform desired operation on each element. Let it be OPERATE. I, J denotes array indices for rows and columns.
  • Slide 52
  • Algorithm Traversal 1. Repeat for I = 1, 2,.,M {Repeat for J = 1, 2, ..,N OPERATE on A [I, J]} 2. End
  • Slide 53
  • "When you do the common things in life in an uncommon way, you will command the attention of the world." - George Washington
  • Slide 54
  • Sum of elements on either diagonals of a N * N array A be an array of size N * N. I,J denotes array indices.SUM stores sum of elements on both diagonals.
  • Slide 55
  • Algorithm 1. SUM = 0 2. Repeat for I = 1, 2,.,N {Repeat for J = 1, 2, ,N {If ((I = J) OR ( I + J )= N + 1) Then SUM = SUM + A [ I, J ]} } 3. Write SUM 4. End
  • Slide 56
  • Print upper half of a N * N array 1. Repeat for I = 1,2,,N { Repeat for J = I,I+1,.,N Write (A [I, J] ) properly } 2. End
  • Slide 57
  • Find sum/difference of two N * M arrays It can be obtained by adding or subtracting the corresponding elements of two arrays.
  • Slide 58
  • Algorithm A and B be two arrays of size N * M. Let OP denote the operation to be performed (+, -). I,J denotes array indices for rows and columns respectively. We can do this 1. Without using any additional array 2. Using an additional array of size N * M
  • Slide 59
  • Without using any additional array 1. Read OP 2. If (OP = +) Then {Repeat for I = 1,2,.,N {Repeat for J = 1,2,..,M Write (A [I, J] + B [I, J])}} 3. If (OP = - ) {Repeat for I = 1, 2, ..,N {Repeat for J = 1,2,.,M Write(A [I, J] B [I, J])}} 4. End
  • Slide 60
  • Using an additional array C of size N*M 1. Read OP 2. If (OP = +) Then {Repeat for I = 1,2,,N {Repeat for J = 1,2,.M C [I, J] = A [I, J] + B [I, J]} } 3. If (OP = - ) Then {Repeat for I = 1,2,,N {Repeat for J = 1,2,.M C [I, J] = A [I, J] - B [I, J]} } 4. End
  • Slide 64
  • Limitations of arrays 1. The element must be homogeneous 2. The insertion and deletion operation requires shifting of elements which take time. 3. Size of array is fixed.
  • Slide 65
  • Class Test Question carrying 2 1/5 marks each 1. Define the term data structure ? Give examples? 2. Address calculation of 1 D array ?
  • Slide 66
  • Questions carrying 4 marks 1. Differentiate linear search and binary search? Give a pgm for binary search in ascending order?
  • Slide 67
  • 2. Program to delete an element from an unsorted array
  • Slide 68
  • 3. Explain Sorting ? Give a program for bubble sort ?
  • Slide 69
  • 4. What is merging ? Merge two arrays which are in ascending order?
  • Slide 70
  • 5. Find sum and difference of two N * M arrays Using a third variable for storing the sum.
  • Slide 71
  • Address calculation of 2 D array i, j denotes row and column index where LB1
  • START : Contains the address of first element NODES : Elements of linked list NODE -> 1. information 2. link or pointer (for storing the address of next node )
  • Slide 77
  • We use the address to access the elements in the logical order. The list in memory may not be physically sequential. So Binary search is impossible here.
  • Slide 78
  • The memory allocation of array is STATIC. ie the number of elements is known in advance Dynamic memory allocation : Allocation during runtime. DS like linked lists,trees and graphs uses this techniques.
  • Slide 79
  • Stack (LIFO) Important subclass of lists in which insertion and deletion of an element are allowed only at one end.(top) PUSH : insertion POP : deletion TOP : The most accessible element BOTTOM : Least accessible element.
  • Slide 80
  • We can implement the concept of stack in two ways 1. Implemented as an array (Static) 2. Implemented as a linked list(Dynamic)
  • Slide 81
  • Stack as an array (Array implementation of stack) Array is a static data structure. So creation of a stack as an array requires the number of elements in advance. Here is an example for an array implementation of stack having size 5.
  • Slide 82
  • Operations on stack Add an element in to a stack -> PUSH Delete an element from a stack -> POP Now we cant Push any other elements as the stack is already full, If we do so an overflow takes place.
  • Slide 83
  • Underflow When a stack is empty it contains no element, and it is not possible to POP the stack,If we do so an underflow takes place.
  • Slide 84
  • Insertion (PUSH)in a stack as an array S :stack N :size DATA : Element to be inserted. TOP:The position of top element in the stack
  • Slide 85
  • 1. If(TOP = N) { Write (Stack Overflow) go to step 4 } 2. TOP = TOP + 1 3. S [TOP] = DATA 4. End
  • Slide 86
  • void push(int s[],int &top,int data) { if(top== size-1) { cout info = data; newptr -> next = top; top = newptr;} else { cout
  • Function to pop a node void POP () { if (! top){ cout
  • Way of writing operator between two operands is called infix notation and the expression is called infix form expression High level lang -> machine lang called the object code. Computer assumes that arithmetic operation can take place in two operands only.
  • Slide 112
  • Generally it is not. Solution : rework the expression and write in a particular form known as postfix notation using stack which operates in one operator and two operands. Three representations are given below
  • Slide 113
  • A + B :Infix notation + AB:Prefix notation AB +:Postfix notation
  • Slide 114
  • Infix to Prefix conversion (A B ) / C D + E Infix notation ( - AB ) / C D + E ( / ( - AB )C ) D + E ( - ( / ( - AB ) C ) D) + E + (- (/ ( - AB ) C ) D ) E + - / - ABCDEPrefix notation
  • Slide 115
  • Infix to Postfix ( A B )/ C D + EInfix notation Put parenthesis to determine actual order. ie ((( A B ) / C ) D ) + E ((( AB - ) / C) D ) + E (( AB C / ) D ) + E ( AB C / D - ) + E AB C / D E +
  • Slide 116
  • Advantage of Prefix and Postfix Here parenthesis are not required to enclose the operations. Computers evaluates arithmetic expressions given in INFIX form as 1. Convert INFIX to POSTFIX using stack 2. Evaluate POSTFIX expression
  • Slide 117
  • Infix to Postfix conversion Here we uses a stack to perform the operation. We have an algorithm for this conversion and is EXP:Infix expression which we want to convert to postfix PE:Postfix expression. STACK:Stack to hold operators and left parenthesis
  • Slide 118
  • We enclose the expression in parenthesis. Let left and right parenthesis, operators and operands be called as symbols.EXP be scanned from left to right and PE will be constructed from operands of EXP and the operators popped from the stack, Finally leaving an empty stack
  • Slide 119
  • 1. First of all enclose the EXP in parenthesis i.e. () 2. Read next symbol of EXP and repeat steps 3 to 6 until the stack is empty and go to step 7. 3. If the symbol read = operand then add it to PE 4. If the symbol read = ( then push it into STACK 5. If the symbol read = operator then i) Repeat while (Priority of TOP (STACK)>= Priority of operator) { POP operator from stack Add operator to PE} ii ) Push operator in to stack STACK 6. If the symbol read = ) then i) repeat while (TOP (STACK != ( ){ POP operator from stack Add operator to PE} ii) Remove the ( 7. PE is the desired postfix expression 8. End
  • Slide 120
  • Obtain the postfix notation for the following infix notation of expression showing the content of the stack and postfix expression formed after each step of conversion. A * B + ( C D / F ) Solution ? Here is the algorithm !!!
  • Slide 121
  • Symbol read = ( push it on stack = A add it to PE = * push it on stack = B add it to PE = + push it on the stack = ( push it on the stack = C add it to PE = - push it on stack = D add it to PE = / push it on stack = F add it to PE = )Pop the stack until TOP of stack =( and add symbols popped to PE = )pop the stack and add the symbol to PE
  • Slide 122
  • PE = AB * C DF / - +
  • Slide 123
  • Evaluation of PE
  • Slide 124
  • PE has no parenthesis, so it can be evaluated as two operands and an operator at a time (except NOT operator). It is easy to handle PE by the compiler than Infix Expression.
  • Slide 125
  • Algorithm
  • Slide 126
  • 1. Create an empty stack STACK 2. Read next symbol of postfix expression PE and repeat up to step 4 until end of expression is reached and go to step 5. 3. If (symbol read = operand ) Then PUSH (STACK, symbol read) 4. If (symbol read = operator )Then{ If (operator = NOT) Then{ POP (STACK, symbol) Evaluate the expression so formed Push the result on to the stack} else{ POP (STACK, symbol 1) POP (STACK, symbol 2) Evaluate result = symbol 2 operator symbol1 PUSH (STACK,result){} 5. POP (STACK,result) 6. End
  • Slide 127
  • Sure question for board exam !!!
  • Slide 128
  • Evaluate the given postfix notation of expression and show status of stack for each operation. 500, 20, 30, +, 10, *, +
  • Slide 129
  • Refreshment Test 001
  • Slide 130
  • 1. Convert the expression ( TRUE && FALSE ) | | ! (FALSE | | TRUE) to postfix expression.Show the content of the stack at every step ?
  • Slide 131
  • 2. Use a stack to evaluate the following postfix expression and show the content of the stack after execution of each operation. AB CD + E * + Where A = 5,B = 3,C = 5,D = 4, and E = 2
  • Slide 132
  • QUEUE FIFO (First In First Out)
  • Slide 133
  • Queue !!! Subclass of lists in which insertion and deletion takes place at specific ends i e rear and front respectively. Insertion :Rear (I a R) Deletion:Front It is a FIFO or FCFS (First Come First Served) data structure. E g:Persons entering a cinema hall
  • Slide 134
  • Operations on Queue 1. Creation of queue 2. Check for empty queue 3. Check for full queue 4. Insert an element in queue 5. Delete an element from queue 6. Display queue
  • Slide 135
  • Queue as an array (Array implementation of queue)
  • Slide 136
  • We have an example
  • Slide 137
  • Insertion in a queue as an array Q:Queue N:size of queue DATA:Element to be inserted F:Front position in the queue R:Rear position in the queue
  • Slide 138
  • Insertion 1. If ( R = N ) Then{ Write (Insertion not possible) go to step 5} 2. R = R + 1 3. Q [ R ] = DATA 4. If (F = 0 ) Then F = 1 5. End
  • Slide 139
  • Deletion 1. If ( F = 0 ) Then{ write ( Deletion not possible ) go to step 4} 2. DATA = Q [ F ] 3. If (F = R)Then{ F = 0 R = 0} else F = F + 1 4. End
  • Slide 140
  • Is it an efficient one !!!
  • Slide 141
  • It is possible to come across a situation when the queue is empty but it is not possible to insert any new element in the queue. So its not acceptable. To overcome this we can implement the queue as a stack where one end is fixed. i e fix the front end.
  • Slide 142
  • It is considered to be inefficient It may take time if the queue is very large. It may be costly Solution : Use the array holding the queue as a circular queue.
  • Slide 143
  • Queue as a circular array
  • Slide 144
  • Here we have an example showing the processing of a circular queue. Insertion in a circular queue as an array
  • Slide 145
  • Slide 146
  • 1. If (R = N) Then R = 1 else R = R + 1 2. If (F = R )Then{ write (Queue overflow) go to step 5} 3. Q [R] = DATA 4. If (F = 0) Then F = 1 5. End
  • Slide 147
  • Deletion from a circular queue as an array
  • Slide 148
  • 1. If ( F = 0) Then{ Write (Queue underflow) go to step 4} 2. DATA = Q [F] 3. If (F = R )Then{ F = 0 R = 0} else{ If ( F = N) Then F = 1 else F = F + 1} 4. End
  • Slide 149
  • 1. Write a program to delete element from the particular position of an array. 2. Program to explain inline function 3. Write a program to add element to the particular position of an array. 4. Find the area of square, triangle, rectangle, and circle by using function overloading
  • Slide 150
  • Linked Implementation of a queue
  • Slide 151
  • It overcomes the drawbacks of queue used as an array, because the location in an array remain unused the array size may not be enough to store the desired number of elements Here we use front:point to first element rear:point to the last element
  • Slide 152
  • If the front pointer is null???? A new element can be inserted at the end of the list after last node How to delete?
  • Slide 153
  • Insertion DATA:? FRONT:? REAR:? New element is inserted at the rear end. Rear gets modified after insertion. AVAIL:? NEWPTR:?
  • Slide 154
  • 1. If (AVAIL = NULL) Then{ Write (Availability stack underflow) go to step 6} 2. NEWPTR = AVAIL 3. AVAIL = LINK (AVAIL) 4. INFO (NEWPTR) = DATA LINK (NEWPTR) = NULL 5. If (REAR = NULL ) Then{ FRONT = NEWPTR REAR = NEWPTR} else{ LINK (REAR ) = NEWPTR REAR = NEWPTR} 6. End
  • Slide 155
  • Deletion FONT:? AVAIL:? TEMP:Temporary pointer
  • Slide 156
  • 1. If (FRONT = NULL)Then{ Write (Empty queue) go to step 8} 2. TEMP = FRONT 3. Write (Deleted element is , INFO (TEMP) ) 4. FRONT = LINK (FRONT) 5. If (FRONT = NULL ) Then REAR = NULL 6. LINK (TEMP) = AVAIL 7. AVAIL = TEMP 8. End
  • Slide 157
  • Implementation of a queue as a Circular linked list
  • Slide 158
  • DEQUEUE ( DOUBLE ENDED QUEUE )
  • Slide 159
  • Linear list in which insertion and deletion are made to or from either end of the structure. It is more general than a stack or a queue.It is of two types. 1. Input restricted dequeue : Insertion allowes at only one end. 2. Output restricted dequeue : Deletion allowed only at one end
  • Slide 160
  • Priority Queue
  • Slide 161
  • Queue in which we can insert or delete elements from any position depending on some priority. E g : In a multiuser system CPU is needed by many programs and it is utilized by the program one at a time depending on some priority.CPU is first used by program having the highest priority.