Storage Strategies: Dynamic Linking

Slides:



Advertisements
Similar presentations
Chapter 22 Implementing lists: linked implementations.
Advertisements

Stacks, Queues, and Linked Lists
Linked Lists.
Elementary Data Structures CS 110: Data Structures and Algorithms First Semester,
Unit 11 1 Unit 11: Data Structures H We explore some simple techniques for organizing and managing information H This unit focuses on: Abstract Data Types.
Summary of lectures (1 to 11)
Chapter 4 Linked Structures – Stacks Modified. Chapter Scope Object references as links Linked vs. array-based structures Managing linked lists Linked.
Review 1 Introduction Representation of Linear Array In Memory Operations on linear Arrays Traverse Insert Delete Example.
30 May Stacks (5.1) CSE 2011 Winter Stacks2 Abstract Data Types (ADTs) An abstract data type (ADT) is an abstraction of a data structure An.
4-1 Topic 6 Linked Data Structures. 4-2 Objectives Describe linked structures Compare linked structures to array- based structures Explore the techniques.
Stacks and Queues Based on D.S. Malik, Java Programming: Program Design Including Data Structures.
Chapter 6 Stacks. Copyright © 2004 Pearson Addison-Wesley. All rights reserved.1-2 Chapter Objectives Examine stack processing Define a stack abstract.
1 Linked Structures, LinkedSet References as Links Linear Linked Lists and Non-linear Structures Managing Linked Lists Data Encapsulation Separate from.
Linked Structures - Review Chapter 13 Instructor: Scott Kristjanson CMPT 125/125 SFU Burnaby, Fall 2013.
Linked Structures, LinkedStack
Linked Lists Chapter 4. Linked Structures: Motivations Arrays have fixed size –Problematic for data structures of arbitrary size Arrays order items physically.
Chapter 5 Linked Lists. © 2004 Pearson Addison-Wesley. All rights reserved 5 A-2 Preliminaries Options for implementing an ADT –Array Has a fixed size.
1 Stacks (Continued) and Queues Array Stack Implementation Linked Stack Implementation The java.util.Stack class Queue Abstract Data Type (ADT) Queue ADT.
Lecture 20 Stacks and Queues. Stacks, Queues and Priority Queues Stacks – first-in-last-out structure – used for function evaluation (run-time stack)
List Interface and Linked List Mrs. Furman March 25, 2010.
Topic 13 Iterators. 9-2 Motivation We often want to access every item in a data structure or collection in turn We call this traversing or iterating over.
1 Example: LinkedStack LinkedStack UML Class Diagram LinkedStack Class LinkedStack Attributes/Constructor LinkedStack Methods LinkedStack iterator method.
1 Queues (Continued) Queue ADT Linked queue implementation Array queue implementation Circular array queue implementation Deque Reading L&C , 9.3.
Chapter 3 Lists, Stacks, Queues. Abstract Data Types A set of items – Just items, not data types, nothing related to programming code A set of operations.
Linked Structures - Stacks. Linked Structures An alternative to array-based implementations are linked structures A linked structure uses object references.
Section 3.7 Linked-Based Implementations
Linked List, Stacks Queues
Chapter 3: Fundamental Data Structures: The Array and Linked Structures Data Structures in Java: From Abstract Data Types to the Java Collections Framework.
Iterators.
Stack: a Linked Implementation
Stacks II David Lillis School of Computer Science and Informatics
Lecture 6 of Computer Science II
Elementary Data Structures
CHAPTER 4: Linked Structures
The List ADT.
Chapter 4 Linked Structures.
Java Methods Lists and Iterators Object-Oriented Programming
Chapter 12 – Data Structures
Lectures linked lists Chapter 6 of textbook
Review Deleting an Element from a Linked List Deletion involves:
Chapter 22 Custom Generic Data Structures
Data Structures and Algorithms
Stacks.
Chapter 14: Stacks.
Sequences 8/2/ :13 AM Linked Lists Linked Lists.
LINKED LISTS CSCD Linked Lists.
Pointers and Dynamic Variables
Chapter 4 Linked Structures - Stacks
Prof. Neary Adapted from slides by Dr. Katherine Gibson
Stacks Linked Lists Queues Heaps Hashes
Linked Lists.
Stacks, Queues, and Deques
Object Oriented Programming COP3330 / CGS5409
Arrays and Linked Lists
Chapter 18: Linked Lists.
Chapter 4 Linked Structures - Stacks
Stacks, Queues, and Deques
Sequences 12/8/2018 3:02 AM Linked Lists Linked Lists.
Programming II (CS300) Chapter 07: Linked Lists and Iterators
Example: LinkedSet<T>
Review & Lab assignments
Data Structures and Algorithms
Problem Understanding
Lecture 14 Linked Lists CSE /26/2018.
Stacks and Queues Based on D.S. Malik, Java Programming: Program Design Including Data Structures.
Programming II (CS300) Chapter 07: Linked Lists
Chapter 5 Linked Lists © 2011 Pearson Addison-Wesley. All rights reserved.
Stacks, Queues, and Deques
CSCS-200 Data Structure and Algorithms
Presentation transcript:

Storage Strategies: Dynamic Linking References as Links Data Encapsulation and Linking Linked Lists Singly Linked Lists Doubly Linked Lists Reading: L&C 4.1-4.3, 4.6, 7.4

References as Links A linked structure is a data structure that uses object reference variables to create links between objects Declaring an object reference variable Object obj = new Object(); A diagram of an object reference variable Object reference variable An object of Object class obj

Data Encapsulation and Linking It is desirable to have a generic link class that can be used to link any type of objects of any class encapsulating the “real” data Class LinearNode<T> does that this way top null LinearNode <T> next; T element; LinearNode <T> next; T element; LinearNode <T> next; T element; Object of type T Object of type T Object of type T

Data Encapsulation and Linking A self-referential (or recursive) LinearNode<T> object has a reference to another LinearNode<T> object public class LinearNode<T> { // attributes of the data in an element object private T element // encapsulated element // link (or pointer) to another LinearNode object private LinearNode<T> next; // next item in list // constructor public LinearNode(T element) this.element = element; // encapsulate element next = null; // set the link to null }

Data Encapsulation and Linking // accessor and mutator methods public void setNext(LinearNode<T> next) { this.next = next; } public LinearNode<T> getNext() return next; public T getElement() return element; }// end class LinearNode<T>

Data Encapsulation and Linking Unlike an array which has a fixed size, a linked list is considered to be a dynamic memory structure The amount of memory used grows and shrinks as objects are added to the list or deleted from the list The Java compiler and virtual machine allocate memory for each object as it is created (via the new operator) and free memory as each object is garbage collected

Managing Singly Linked Lists Can insert a new LinearNode in two places: At the front In the middle or at the end Can delete a LinearNode in two places: The order in which references are changed is crucial to maintaining linked list integrity

Inserting Objects in a Linked List Create new LinearNode object and link at top LinearNode<T> newNode = new LinearNode<T>(element); newNode.setNext(top); top = newNode; newNode = null; // may be needed for stale reference // if newNode won’t go out of scope 1 newNode LinearNode<T> next; 2 4 top LinearNode<T> next; LinearNode<T> next; 3

Inserting Objects in a Linked List Create new LinearNode object Link after current LinearNode object (current could be at the end) LinearNode<T> newNode = new LinearNode<T>(element); newNode.setNext(current.getNext()); current.setNext(newNode); newNode = null; 1 newNode LinearNode<T> next; 2 4 current top LinearNode<T> next; LinearNode<T> next; LinearNode<T> next; 3

Removing Objects from a Linked List Remove LinearNode object at front LinearNode<T> removed = top; top = top.getNext()); removed.setNext(null); // remove stale reference 1 removed 3 top LinearNode<T> next; LinearNode<T> next; LinearNode<T> next; 2

Removing Objects from a Linked List Remove LinearNode after current LinearNode object (removed object could be at end) LinearNode<T> removed = current.getNext(); current.setNext(removed.getNext()); removed.setNext(null); // remove stale reference current removed 1 LinearNode<T> next; top LinearNode<T> next; LinearNode<T> next; 3 2

Linked Stack Implementation We can use the LinearNode class to implement a Stack using linking We use the attribute name “top” to have a meaning consistent with a stack count integer top LinearNode next; T element; LinearNode next; T element; null Object of type T Object of type T

Linked Stack Implementation push – O(1) public void push (T element) { LinearNode<T> temp = new LinearNode<T>(element); temp.setNext(top); top = temp; count++; } Note difference between the LinkedStack push method and ArrayStack push method

Linked Stack Implementation pop – O(1) public T pop () throws EmptyStackException { if (isEmpty()) throw new EmptyStackException(); T result = top.getElement(); top = top.getNext(); // LinearNode is garbage now count--; return result; } Note difference between the LinkedStack pop method and ArrayStack pop method

LinkedStack Implementation Notice that we don’t need an expandCapacity method in our LinkedStack implementation The “new” operator called in the push method automatically allocates the memory for each LinearNode object when it is needed When the reference to the LinearNode at top is overwritten in the pop method, the JVM garbage collector will release the memory for the now unneeded LinearNode

StackIterator Definition/Attributes Class Definition/Attribute Declarations (implemented as an inner class) private class StackIterator<T> implements Iterator<T> { private T current; Constructor: public StackIterator() current = top; // start at top for LIFO }

StackIterator Methods hasNext – O(1) public boolean hasNext() { return current != null; } next – O(1) public T next() if (!hasNext()) throw new NoSuchElementException(); T result = current.getElement(); current = current.getNext(); return ;

Doubly Linked Lists Each DoubleNode object has a reference to next DoubleNode and previous DoubleNode public class DoubleNode<T> { private DoubleNode<T> next; private DoubleNode<T> prev; private T element; front DoubleNode<T> next DoubleNode<T> prev T element DoubleNode<T> next DoubleNode<T> prev T element null null back Object of type T Object of type T

Doubly Linked Lists To add a DoubleNode object to the list, your code must set the DoubleNode next and prev variables in both the new node and its adjacent neighbors To delete a DoubleNode object from the list, your code must bypass the DoubleNode next and prev variables in both neighbors adjacent to the removed node and may need to set its two stale references to null

Traversing Linked Lists We can use “for” or “while” loops to traverse a linked list or a doubly linked list - examples: for(LinearNode<T> node = front; node != null; node = node.getNext()) { . . . } for(DoubleNode<T> node = back; node != null; node = node.getPrev()) { . . . } LinearNode<T> node = front; // or DoubleNode back while(node != null) { . . . node = node.getNext(); // or Doublenode prev }