Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Data Structures 1 DATA STRUCTURES The logical or mathematical model of a particular organization of data is called a data structure 2 DATA STRUCTURES A primitive data type holds a single piece of data –e.g. in Java: int, long, char, boolean etc. –Legal operations on integers: + - * / ... A data structure structures data! –Usually more than one piece of data –Should provide legal operations on the data –The data might be joined together (e.g. in an array): a collection 3 Static vs. Dynamic Structures A static data structure has a fixed size This meaning is different than those associated with the static modifier Arrays are static; once you define the number of elements it can hold, it doesn’t change A dynamic data structure grows and shrinks as required by the information it contains 4 Abstract Data Type An Abstract Data Type (ADT) is a data type together with the operations, whose properties are specified independently of any particular implementation. 5 Abstract Data Type In computing, we view data from three perspectives: Application level View of the data within a particular problem Logical level An abstract view of the data values (the domain) and the set of operations to manipulate them Implementation level A specific representation of the structure to hold the data items and the coding of the operations in a programming language 6 Problem Solving: Main Steps 1. 2. 3. 4. 5. 6. Problem definition Algorithm design / Algorithm specification Algorithm analysis Implementation Testing [Maintenance] 7 Problem Definition What is the task to be accomplished? Calculate the average of the grades for a given student What are the time / space / speed / performance requirements? 8 . Algorithm Design / Specifications Algorithm: Finite set of instructions that, if followed, accomplishes a particular task. Describe: in natural language / pseudo-code / diagrams / etc. Criteria to follow: Input: Zero or more quantities (externally produced) Output: One or more quantities Definiteness: Clarity, precision of each instruction Finiteness: The algorithm has to stop after a finite (may be very large) number of steps Effectiveness: Each instruction has to be basic enough and feasible 9 Implementation, Testing, Maintenances Implementation Decide on the programming language to use C, C++, Lisp, Java, Perl, Prolog, assembly, etc. , etc. Write clean, well documented code Test, test, test Integrate feedback from users, fix bugs, ensure compatibility across different versions Maintenance 10 Algorithm Analysis Space complexity How much space is required Time complexity How much time does it take to run the algorithm Often, we deal with estimates! 11 Space Complexity Space complexity = The amount of memory required by an algorithm to run to completion [Core dumps = the most often encountered cause is “memory leaks” – the amount of memory required larger than the memory available on a given system] Some algorithms may be more efficient if data completely loaded into memory Need to look also at system limitations E.g. Classify 2GB of text in various categories [politics, tourism, sport, natural disasters, etc.] – can I afford to load the entire collection? 12 Space Complexity (cont’d) 1. Fixed part: The size required to store certain data/variables, that is independent of the size of the problem: - e.g. name of the data collection - same size for classifying 2GB or 1MB of texts 2. Variable part: Space needed by variables, whose size is dependent on the size of the problem: - e.g. actual text - load 2GB of text VS. load 1MB of text 13 Space Complexity (cont’d) S(P) = c + S(instance characteristics) c = constant Example: float sum (float* a, int n) { float s = 0; for(int i = 0; i<n; i++) { s+ = a[i]; } return s; } Space? one word for n, one for a [passed by reference!], one for i constant space! 14 Time Complexity Often more important than space complexity space available (for computer programs!) tends to be larger and larger time is still a problem for all of us 3-4GHz processors on the market researchers estimate that the computation of various transformations for 1 single DNA chain for one single protein on 1 TerraHZ computer would take about 1 year to run to completion Algorithms running time is an important issue 15 Running Time Problem: prefix averages Given an array X Compute the array A such that A[i] is the average of elements X[0] … X[i], for i=0..n-1 Sol 1 At each step i, compute the element X[i] by traversing the array A and determining the sum of its elements, respectively the average Sol 2 At each step i update a sum of the elements in the array A Compute the element X[i] as sum/I 16 Running time worst-case 5 ms } 4 ms average-case? 3 ms best-case 2 ms 1 ms A B C D Input E F G Suppose the program includes an if-then statement that may execute or not: variable running time Typically algorithms are measured by their worst case 17 Experimental Approach Write a program that implements the algorithm Run the program with data sets of varying size. Determine the actual running time using a system call to measure time (e.g. system (date) ); Problems? 18 Experimental Approach It is necessary to implement and test the algorithm in order to determine its running time. Experiments can be done only on a limited set of inputs, and may not be indicative of the running time for other inputs. The same hardware and software should be used in order to compare two algorithms. – condition very hard to achieve! 19 Use a Theoretical Approach Based on high-level description of the algorithms, rather than language dependent implementations Makes possible an evaluation of the algorithms that is independent of the hardware and software environments 20 Algorithm Description How to describe algorithms independent of a programming language Pseudo-Code = a description of an algorithm that is more structured than usual prose but less formal than a programming language (Or diagrams) Example: find the maximum element of an array. Algorithm arrayMax(A, n): Input: An array A storing n integers. Output: The maximum element in A. currentMax A[0] for i 1 to n -1 do if currentMax < A[i] then currentMax A[i] return currentMax 21 Properties of Big-Oh Expressions: use standard mathematical symbols use for assignment ( ? in C/C++) use = for the equality relationship (? in C/C++) Method Declarations: -Algorithm name(param1, param2) Programming Constructs: decision structures: if ... then ... [else ..] while-loops while ... do repeat-loops: repeat ... until ... for-loop: for ... do array indexing: A[i] Methods calls: object method(args) returns: return value Use comments Instructions have to be basic enough and feasible! 22 Asymptotic analysis - terminology Special classes of algorithms: logarithmic: O(log n) linear: O(n) quadratic: O(n2) polynomial: O(nk), k ≥ 1 exponential: O(an), n > 1 Polynomial vs. exponential ? Logarithmic vs. polynomial ? 23 Some Numbers log n n 0 1 2 3 4 5 n log n 1 2 4 8 16 32 0 2 8 24 64 160 n2 1 4 16 64 256 1024 n3 2n 1 2 8 4 64 16 512 256 4096 65536 32768 4294967296 24 Relatives of Big-Oh “Relatives” of the Big-Oh (f(n)): Big Omega – asymptotic lower bound (f(n)): Big Theta – asymptotic tight bound Big-Omega – think of it as the inverse of O(n) g(n) is (f(n)) if f(n) is O(g(n)) Big-Theta – combine both Big-Oh and Big-Omega f(n) is (g(n)) if f(n) is O(g(n)) and g(n) is (f(n)) Make the difference: 3n+3 is O(n) and is (n) 3n+3 is O(n2) but is not (n2) 25 More “relatives” Little-oh – f(n) is o(g(n)) if for any c>0 there is n0 such that f(n) < c(g(n)) for n > n0. Little-omega Little-theta 2n+3 is o(n2) 2n + 3 is o(n) ? 26 Example Remember the algorithm for computing prefix averages compute an array A starting with an array X every element A[i] is the average of all elements X[j] with j < i Remember some pseudo-code … Solution 1 Algorithm prefixAverages1(X): Input: An n-element array X of numbers. Output: An n -element array A of numbers such that A[i] is the average of elements X[0], ... , X[i]. Let A be an array of n numbers. for i 0 to n - 1 do a0 for j 0 to i do a a + X[j] A[i] a/(i+ 1) return array A 27 Example (cont’d) Algorithm prefixAverages2(X): Input: An n-element array X of numbers. Output: An n -element array A of numbers such that A[i] is the average of elements X[0], ... , X[i]. Let A be an array of n numbers. s 0 for i 0 to n do s s + X[i] A[i] s/(i+ 1) return array A 28 Back to the original question Which solution would you choose? O(n2) vs. O(n) Some math … properties of logarithms: logb(xy) = logbx + logby logb (x/y) = logbx - logby logbxa = alogbx logba= logxa/logxb –properties of exponentials: a(b+c) = aba c abc = (ab)c ab /ac = a(b-c) b = a logab bc = a c*logab 29 Important Series N S ( N ) 1 2 N i N (1 N ) / 2 Sum of squares: Sum of exponents: i 1 N ( N 1)(2 N 1) N 3 i for large N 6 3 i 1 N 2 N k 1 i for large N and k -1 | k 1| i 1 N k Geometric series: Special case when A = 2 20 + 21 + 22 + … + 2N = 2N+1 - 1 N AN 1 1 A A 1 i 0 i 30 Analyzing recursive algorithms function foo (param A, param B) { statement 1; statement 2; if (termination condition) { return; foo(A’, B’); } 31 Solving recursive equations by repeated substitution T(n) T(n) = T(n/2) + c = T(n/4) + c + c = T(n/8) + c + c + c = T(n/23) + 3c =… = T(n/2k) + kc substitute for T(n/2) substitute for T(n/4) in more compact form “inductive leap” = T(n/2logn) + clogn “choose k = logn” = T(n/n) + clogn = T(1) + clogn = b + clogn = θ(logn) 32 Solving recursive equations by telescoping T(n) = T(n/2) + c T(n/2) = T(n/4) + c T(n/4) = T(n/8) + c T(n/8) = T(n/16) + c … T(4) = T(2) + c T(2) = T(1) + c T(n) = T(1) + clogn the on both sides T(n) = θ(logn) initial equation so this holds and this … and this … eventually … and this … sum equations, canceling terms appearing 33 RECURSION Suppose P is a procedure containing either a CALL statement to itself or a CALL statement back to original procedure P .Then P is called a recursive procedure Properties: 1. There must be certain criteria called basic criteria, for which the procedure does not call itself. 2. Each time the procedure does call itself (directly or indirectly), it must be closer to the base criteria. 34 FACTORIAL WITHOUT RECURSION FACTORIAL(FACT,N) This procedure calculates N! and return the vale in the variable FACT . 1. If N ==0,then :Set FACT:=1, and Return. 2. Set FACT:=1[Initialize FACT for loop] 3. Repeat for K:=1 to N Set FACT:=K*FACT [END of loop] 4. Return. 35 FACTORIAL WITH RECURSION FACTORIAL(FACT,N) This procedure calculates N! and return the vale in the variable FACT . 1. If N ==0,then :Set FACT:=1, and Return. 2. Call FACTORIAL(FACT,N-1). 3. Set FACT:=N*FACT. 4. Return. 36 FACTORIAL EXAMPLE USING RECURSION 37 FACTORIAL EXAMPLE USING RECURSION 38 FACTORIAL EXAMPLE USING RECURSION 39 FACTORIAL EXAMPLE USING RECURSION 40 FACTORIAL EXAMPLE USING RECURSION 41 FACTORIAL EXAMPLE USING RECURSION 42 FACTORIAL EXAMPLE USING RECURSION 43 FACTORIAL EXAMPLE USING RECURSION 44 FACTORIAL EXAMPLE USING RECURSION 45 FACTORIAL EXAMPLE USING RECURSION 46 FACTORIAL EXAMPLE USING RECURSION 47 Stack A stack is a list that has addition and deletion of items only from one end. It is like a stack of plates: Plates can be added to the top of the stack. Plates can be removed from the top of the stack. This is an example of “Last in, First out”, (LIFO). Adding an item is called “pushing” onto the stack. Deleting an item is called “popping” off from the stack. 48 STACK OPERATION (PUSH) PUSH(STACK,TOP,MAXSTK,ITEM) This procedure pushes an ITEM onto a stack. 1.[Stack already filled] If TOP== MAXSTK, then: Print:OVERFLOW, and Return. 2. Set TOP:=TOP+1.[ Increases TOP by 1] 3. Set STACK[TOP]:=ITEM. [Inserting ITEM in new TOP position] 4. Return. 49 STACK OPERATION (POP) POP(STACK,TOP,ITEM) This procedure deletes the top element of STACK and assigns it to the variable ITEM . 1.[Stack has an item to be to removed] If TOP== 0, then: Print:UNDERFLOW, and Return. 2. Set ITEM:=STACK[top].[ Assigns TOP element to ITEM ] 3. Set TOP:=TOP-1. [Decreases TOP by 1] 4. Return. 50 STACK EXAMPLES Implementing a stack : MAXSTK=7. Data push 43 push 23 push 53 pop pop push 100 51 STACK EXAMPLES 7 6 TOP=0 5 MAXSTK=7 4 2 1 52 STACK EXAMPLES 7 6 TOP=1 5 MAXSTK=7 PUSH(43) 4 2 1 43 53 STACK EXAMPLES 7 6 TOP=2 5 MAXSTK=7 PUSH(23) 4 2 23 1 43 54 STACK EXAMPLES 7 6 TOP=3 5 MAXSTK=7 4 53 2 23 1 43 PUSH(53) 55 STACK EXAMPLES 7 6 TOP=2 5 MAXSTK=7 POP( ) 4 2 23 1 43 56 STACK EXAMPLES 7 6 TOP=0 5 MAXSTK=7 POP( ) 4 2 1 43 57 STACK EXAMPLES 7 6 TOP=0 5 MAXSTK=7 PUSH(100) 4 2 100 1 43 58 STACK EXAMPLES 1. INFIX to POSTFIX 2. POSTFIX expression solving 3. N-QUEEN’S problem 59 INFIX to POSTFIX Properties while transforming infix to postfix expression 1. besides operands and operators, arithmetic expression contains left and right parentheses 2. We assume that the operators in q consist only of 1. Exponent 2. Multiplication 3. Division 4. Addition 5. Subtraction 60 INFIX to POSTFIX 3. We have three levels of precedence precedence high operators right parentheses exponent multiplication, division low addition, subtraction 61 INFIX to POSTFIX POLISH(Q, P) Suppose Q is an arithmetic expression written in infix notation. This algorithm finds the equivalent postfix expression P. 1. Push “(“ into STACK and add “)” to the end of Q. 2. Scan Q from left to right and repeat Step 3 to 6 for each element of Q until the STACK is empty: 3. If an operand is encountered add it to P. 4. If a left parenthesis is encountered, push it onto STACK. 5. If an operator is encountered then: (a) repeatedly pop from STACK and to P each operator (on the top of STACK) which has the same precedence as or higher precedence this operator (b) Add operator to STACK 62 INFIX to POSTFIX 6. If a right parenthesis is encountered then: (a) Repeatedly pop from STACK and add to P each operator( on the top of STACK) until a left parenthesis is encountered (b) Remove the left parenthesis .[Do not add the left parenthesis to P] 7. Exit 63 INFIX to POSTFIX INFIX Expression: POSTFIX Expression: 3+2*4 7 6 5 4 2 1 64 INFIX to POSTFIX INFIX Expression: POSTFIX Expression: +2*4 3 7 6 5 4 2 1 65 INFIX to POSTFIX INFIX Expression: POSTFIX Expression: 2*4 3 7 6 5 4 2 1 + 66 INFIX to POSTFIX INFIX Expression: POSTFIX Expression: *4 32 7 6 5 4 2 1 + 67 INFIX to POSTFIX INFIX Expression: POSTFIX Expression: 4 32 7 6 5 4 2 * 1 + 68 INFIX to POSTFIX INFIX Expression: POSTFIX Expression: 324 7 6 5 4 2 * 1 + 69 INFIX to POSTFIX INFIX Expression: POSTFIX Expression: 324* 7 6 5 4 2 1 + 70 INFIX to POSTFIX INFIX Expression: POSTFIX Expression: 324*+ 7 6 5 4 2 1 71 POSTFIX EXPRESSION SOLVING This algorithm finds the VALUE of an arithmetic expression P written in postfix notation 1. Add a right parenthesis “)” at the end of P 2. Scan P from left to right and repeat step 3 and 4 for each element of P until the sentinel “)” is encountered. 3. If an operand is encountered, put it on STACK. 4. If an operator is uncounted then: a. Remove the two elements of Stack, where A is the top element and B is the next top element b. Evaluate B operator A c. Pace the result of (b) back on STACK 72 POSTFIX EXPRESSION SOLVING 5. Set VALUE equal to the top element on STACK 6. Exit 73 POSTFIX EXPRESSION SOLVING POSTFIX Expression: 3 2 4 * + Push the numbers until operator comes 7 6 5 4 2 1 74 POSTFIX EXPRESSION SOLVING POSTFIX Expression: 2 4 * + 7 6 5 4 2 1 3 75 POSTFIX EXPRESSION SOLVING POSTFIX Expression: 4 * + 7 6 5 4 2 2 1 3 76 POSTFIX EXPRESSION SOLVING POSTFIX Expression: * + Here we pop two time and perform multiplication on elements (4*2) and push the Result in to the stack 7 6 5 4 4 2 2 1 3 77 POSTFIX EXPRESSION SOLVING POSTFIX Expression: + 7 6 5 4 2 8 1 3 78 POSTFIX EXPRESSION SOLVING POSTFIX Expression: 3 2 4 * + 7 6 5 4 2 1 11 79 The N-Queens Problem Can the queens be placed on the board so that no two queens are attacking each other in chess board 80 The N-Queens Problem Two queens are not allowed in the same row 81 The N-Queens Problem Two queens are not allowed in the same row, or in the same column... 82 The N-Queens Problem Two queens are not allowed in the same row, or in the same column, or along the same diagonal.r along the same diagonal. 83 The N-Queens Problem The Thenumber numberofofqueens, queens, and andthe thesize sizeofofthe theboard board can canvary. vary. N Queens N columns 84 The 3-Queens Problem The program uses a stack to keep track of where each queen is placed. 85 The 3-Queens Problem Each time the program decides to place a queen on the board, the position of the new queen is stored in a record which is placed in the stack. ROW 1, COL 1 86 The 3-Queens Problem We also have an integer variable to keep track of how many rows have been filled so far. ROW 1, COL 1 1 filled 87 The 3-Queens Problem Each time we try to place a new queen in the next row, we start by placing the queen in the first column ROW 2, COL 1 ROW 1, COL 1 1 filled 88 The 3-Queens Problem if there is a conflict with another queen, then we shift the new queen to the next column. ROW 2, COL 2 ROW 1, COL 1 1 filled 89 The 3-Queens Problem When there are no conflicts, we stop and add one to the value of filled. ROW 2, COL 3 ROW 1, COL 1 1 filled 90 The 3-Queens Problem When there are no conflicts, we stop and add one to the value of filled. ROW 2, COL 3 ROW 1, COL 1 2 filled 91 The 3-Queens Problem Let's look at the third row. The first position we try has a conflict ROW 3, COL 1 ROW 2, COL 3 ROW 1, COL 1 2 filled 92 The 3-Queens Problem so we shift to column 2. But another conflict arises ROW 3, COL 2 ROW 2, COL 3 ROW 1, COL 1 2 filled 93 The 3-Queens Problem and we shift to the third column. Yet another conflict arises ROW 3, COL 3 ROW 2, COL 3 ROW 1, COL 1 2 filled 94 The 3-Queens Problem and we shift to column 4. There's still a conflict in column 4, so we try to shift rightward again ROW 3, COL 4 ROW 2, COL 3 ROW 1, COL 1 2 filled 95 The 3-Queens Problem but there's nowhere else to go. ROW 3, COL 4 ROW 2, COL 3 ROW 1, COL 1 2 filled 96 The 3-Queens Problem When we run out of room in a row: pop the stack, reduce filled by 1 and continue working on the previous row. ROW 2, COL 3 ROW 1, COL 1 1 filled 97 The 3-Queens Problem Now we continue working on row 2, shifting the queen to the right. ROW 2, COL 4 ROW 1, COL 1 1 filled 98 The 3-Queens Problem This position has no conflicts, so we can increase filled by 1, and move to row 3. ROW 2, COL 4 ROW 1, COL 1 2 filled 99 The 3-Queens Problem In row 3, we start again at the first column. ROW 3, COL 1 ROW 2, COL 4 ROW 1, COL 1 2 filled 100 The 3-Queens Problem In row 3, we start again at the first column. ROW 3, COL 2 ROW 2, COL 4 ROW 1, COL 1 3 filled 101 QUEUES A queue is a data structure that maintains a “first-in first-out” (FIFO) ordering. In contrast, a stack maintains a “last-in first-out” (LIFO) ordering. A queue adds new elements at the end. An element can only be removed at the front. This is an abstraction of the “first-come first-served” practice. 102 QUEUE OPERATIONS A queue has two operations: QINSERT QDELETE An enqueue operation adds new elements at the end of the queue or its tail. This is similar to the stack operation push; only that push now is done at the end of the array instead of at the front (or top). A dequeue operation removes an element from the front of the array or its head. 103 QUEUE INSERTION QINSERT(rear, item) 1. IF rear == MAX_QUEUE_SIZE_1 then Print queue_full Return; 2. INFO [++rear] = item; 104 QUEUE DELETION QDELETE(front, rear) 1. IF front == rear then Return queue_empty( ); Return queue [++ front]; 105 QUEUE OFFSET 0 1 2 3 DATA OFFSET 0 DATA A OFFSET 0 DATA 2 3 A OFFSET 0 DATA 1 1 2 3 B 1 B 2 3 front rear 0 0 front rear 1 1 front rear 1 2 front rear 2 2 Insert A Insert B delete 106 CIRCULAR QUEUE When a new item is inserted at the rear, the to rear moves upwards. Similarly, when an item is deleted from the queue the front arrow moves downwards. After a few insert and delete operations the rear might reach the end of the queue and no more items can be inserted although the items from the front of the queue have been deleted and there is space in the queue. 107 CIRCULAR QUEUE To solve this problem, queues implement wrapping around. Such queues are called Circular Queues. Both the front and the rear wrap around to the beginning of the array when they reached the MAX size of the queue. It is also called as “Ring buffer”. 108 CIRCULAR QUEUE INSERTION QINSERT (QUEUE, N, FRONT, ITEM) This procedure insert an element ITEM into a queue. 1. [Queue already filled?] IF ( FRONT==1 and REAR==N ) or FRONT ==REAR + 1,then: write: overflow, and Return 2.[Find new value of REAR] IF FRONT==NULL then [Queue initially empty.] Set FRONT=1 and REAR=1 ELSE IF REAR ==N then Set REAR=1 ELSE set REAR=REAR+1 109 [End of if structure] CIRCULAR QUEUE INSERTION 3. Set QUEUE[REAR]=ITEM.[This inserts new element] 4. Return. 110 CIRCULAR QUEUE DELETION QDELETE(QUEE, N, FRONT, REAR, ITEM) This procedure deletes an element from a queue and assigns it to the variable ITEM 1.[Queue already empty] if FRONT=NULL then write UNDERFLOW, and Return 2. Set ITEM=QUEUE[FRONT] 3. [Find new value of FRONT] If FRONT =REAR then [Queue has only one element to start] Set FRONT=NULL and REAR=NULL 111 CIRCULAR QUEUE DELETION Else if FRONT ==N then Set FRONT=1 Else Set FRONT=FRONT +1 [End of if statement] 4.Return 112 CIRCULAR QUEUE DELETION EMPTY QUEUE [3] [2] [2] [3] J2 [1] [4] [0] [5] front = 0 rear = 0 J3 [1] J1 [4] [0] [5] front = 0 rear = 3 113 CIRCULAR QUEUE DELETION [2] [3] J2 [1] [2] [3] J8 J3 J9 J4 [4][1] J7 J1 J5 [0] front =0 rear = 5 [5] [4] J6 [0] J5 [5] front =4 rear =3 114 PRIORITY QUEUE A priority queue is a collection of elements such that each element has been assigned a priority and such that the order in which elements are deleted and processed comes from the following rules 1. An element of a higher priority is processed before any elements of lower priority 2. Two elements with the same priority are processed according to the order in which they were added to the queue 115 ARRAY REPRESENTATION PRIORITY QUEUE Use a separate queue for each level of priority Each such queue will appear in its own circular array and must have its own pair of pointers FRONT and REAR In fact, if each queue is allocated the same amount of space in two-dimensional array QUEUE can be used instead of linear array 116 DELETION ON PRIORITY QUEUE Deletion This algorithm deletes and processes the first element in a priority queue maintained by a two-dimensional array QUEUE 1.[Find the first nonempty queue] Find the smallest k that FRONT!=NULL 2.Delete and process the front element in row K of QUEUE 117 INSERTION ON PRIORITY QUEUE Insertion This algorithm adds an ITEM with priority number M to a priority queue maintained by a two-dimensional array QUEUE 1. Insert ITEM as the rear element in row M of QUEUE 2. Exit 118 LINKED LIST Linked list Linear collection of self-referential class objects, called nodes Connected by pointer links Accessed via a pointer to the first node of the list Subsequent nodes are accessed via the link-pointer member of the current node Link pointer in the last node is set to null to mark the list’s end Use a linked list instead of an array when You have an unpredictable number of data elements Your list needs to be sorted quickly 119 TYPES OF LINKED LIST Types of linked lists: Singly linked list Begins with a pointer to the first node Terminates with a null pointer Only traversed in one direction Circular, singly linked Pointer in the last node points back to the first node Doubly linked list Two “start pointers” – first element and last element Each node has a forward pointer and a backward pointer Allows traversals both forwards and backwards Circular, doubly linked list Forward pointer of the last node points to the first node and backward pointer of the first node points to the last node 120 linked list Start Node A placeholder node at the beginning of the list, used to simplify list processing. It doesn’t hold any data Tail Node A placeholder node at the end of the list, used to simplify list processing 121 Singly linked list Single Linked List Consists of data elements and reference to the next Node in the linked list First node is accessed by reference Last node is set to NULL Tail Start A B C 122 SINGLE LINKED LIST INSERTION INSFIRST(INFO, LINK, START, AVAIL, ITEM) This algorithm inserts ITEM as the first node in the list 1. [OVERFLOW?] If AVAIL=NULL then :Write OVERFLOW and Exit 2. [Remove first node from AVIL list] Set NEW =AVAIL and AVAIL=LINK[AVAIL] 3. Set INFO[NEW]=ITEM [Copies new data into new node] 4. Set LINK[NEW]=START [new node now points to original first node] 5. Set START=NEW [Changes START so it points to the node] 6. Exit 123 SINGLE LINKED LIST INSERTION start current a d c s X 1 124 SINGLE LINKED LIST INSERTION start current a d c s X 1 125 SINGLE LINKED LIST INSERTION start current a d c s X 1 126 SINGLE LINKED LIST INSERTION start current a d c s X 1 127 SINGLE LINKED LIST INSERTION start current a d c s X 1 128 SINGLE LINKED LIST INSERTION INSLOC(INFO, LINK,START, AVAIL, LOC, ITEM) This algorithm inserts ITEM so that ITEM follows the node with location LOC or inserts ITEM as the first node when LOC=NULL 1. [OVERFLOW ?] If AVAIL==NULL then write OVERFLOW and EXIT 2. [Remove first node from AVAIL list] 3. Set INFO[NEW]=ITEM[copies new data into new node] 4. If LOC==NULL then :[insert as first node] Set LINK[NEW]=Start and START=NEW else [insert after node with location LOC] Set LINK[NEW]=LINK[LOC] and LINK[LOC]=NEW end of if structure 5. exit 129 SINGLE LINKED LIST INSERTION current start 2 3 temp 5 6 X 9 130 SINGLE LINKED LIST INSERTION current start 2 3 temp 5 6 X 9 131 SINGLE LINKED LIST INSERTION current start 2 3 temp 5 6 X 9 132 SINGLE LINKED LIST INSERTION current start 2 3 temp 5 6 X 9 133 SINGLE LINKED LIST DELETION DELETE(INFO, LINK,START, AVAIL, ITEM) This algorithm deletes from a linked list the first node N which contains the given ITEM of information 1. [Use procedure FIND given after this algorithm] FIND(INFO, LINK, START, ITEM, LOC, LOCP) 2. If LOC==NULL then: Write ITEM not in list and exit 3. If LOCP==NUL then Set START=LINK[START] else : Set LINK[LOCP]=LINK[LOC] 3. {Return deleted node to the AVAIL list] Set LINK[LOC]=AVAIL and AVAIL=LOC 4. Exit 134 SINGLE LINKED LIST DELETION FINDB(INFO, START, ITEM, LOC, LOCP) This procedure finds the location LOC of first node N which contains ITEM and the location LOVP of the node preceding N. if ITEM does not appear in the list then the procedure sets LOC=NULL and if ITEM appears in the first node then it sets LOCP=NULL 1. [list empty?] if START==NULL then Set LOC =NULL and LOCP==NULL and return 2. [ITEM in first node ] if INFO[START]==ITEM then Set LOC=START and LOCP=NULL and return 3. Set SAVE=START and PRT=LINK[START] 4. Repeat steps 5 and 6 while PTR!=NULL 5. If INFO[PTR]==ITEM then Set LOC=PTR and LOCP=NULL 135 SINGLE LINKED LIST DELETION 6. Set SAVE=PTR and PTR=LINK[PTR] 7. Set LOC=NULL 8. Return 136 SINGLE LINKED LIST DELETION LOC LOCP start 2 3 5 6 X 137 SINGLE LINKED LIST DELETION LOC LOCP start 2 3 5 6 X 138 SINGLE LINKED LIST DELETION LOC LOCP start 2 3 5 6 X 139 Double Linked Lists Consists of nodes with two linked references one points to the previous and other to the next node Maximises the needs of list traversals Compared to single list inserting and deleting nodes is a bit slower as both the links had to be updated It requires the extra storage space for the second list Tail start A B C 140 Insertion Double Linked Lists INSERTWL(INFO,FORW, BACK, STACK,AVAIL,LOCA,LOCB, ITEM) 1. [OVERFLOW?] If AVAIL==NULL then write OVER FLOW and exit 2. [Remove node from AVAIL list and copy new data into node] Set NEW=AVIAL, AVIAL=FORW[AVAIL] INFO[NEW]=ITEM 3. [Insert node into list] Set FORW[LOCA]=NEW, BACK[LOCB]=NEW FORW[NEW]=LOCB BACK[NEW]=LOCA 4. Exit 141 Insertion Double Linked Lists LOC B LOC A start Node A Node B 3 NEW Tail 4 7 7 142 Insertion Double Linked Lists LOC B LOC A start Node A Node B 3 NEW Tail 4 7 7 143 Insertion Double Linked Lists LOC B LOC A start Node A Node B 3 NEW Tail 4 7 7 144 Insertion Double Linked Lists LOC B LOC A start Node A Node B 3 NEW Tail 4 7 7 145 Insertion Double Linked Lists LOC B LOC A start Node A Node B 3 NEW Tail 4 7 7 146 Deletion Double Linked Lists DELTWL(INFO, FORW, BACK, START, AVAIL, LOC) 1. [Delete node] Set FORE[BACK[LOC]]=FORW[LOC] Set BACK[FORW[LOC]]=BACK[LOC] 2. [Return node to AVAIL list] Set FORW[LOC]=AVAIL and AVAIL=LOC 3. Exit 147 Deletion Double Linked Lists LOC Tail start A B C 148 Deletion Double Linked Lists LOC Tail start A B C 149 Deletion Double Linked Lists Tail start A B C 150 Deletion Double Linked Lists Tail start A B C 151