Linked Lists Revision Based on: v/

Slides:



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

Page 11 Solutions to Practice Problems Using a Linked List From Previous Days Notes Create C functions to solve the following problems with linked lists.
Linked Lists Linear collections.
Linked Lists Contents 1.LinkedList implements the Interface List 2.Doubly Linked List implementation of common methods a.boolean add( Object x) -- append.
Linked List 1. Introduction to Linked List 2. Node Class 3. Linked List 4. The Bag Class with Linked List.
Double-Linked Lists and Circular Lists
Stacks, Queues, and Deques. 2 A stack is a last in, first out (LIFO) data structure Items are removed from a stack in the reverse order from the way they.
Queues 4/14/2017 5:24 PM 5.2 Queues Queues Dr Zeinab Eid.
Elementary Data Structures CS 110: Data Structures and Algorithms First Semester,
1 Queues (5.2) CSE 2011 Winter May Announcements York Programming Contest Link also available from.
Chapter 5 Queues Modified. Chapter Scope Queue processing Comparing queue implementations 5 - 2Java Software Structures, 4th Edition, Lewis/Chase.
Linked Lists Compiled by Dr. Mohammad Alhawarat CHAPTER 04.
Topic 11 Linked Lists -Joel Spolsky
CS 307 Fundamentals of Computer Science 1 Linked Lists many slides taken from Mike Scott, UT Austin.
Linked Lists. 2 Anatomy of a linked list A linked list consists of: –A sequence of nodes abcd Each node contains a value and a link (pointer or reference)
Singly Linked Lists - Ed. 2, 3: Chapter 4 - Ed. 4.: Chapter 3.
Lecture 6: Linked Lists Linked lists Insert Delete Lookup Doubly-linked lists.
Linked Lists part II. Linked Lists A linked list is a dynamic data structure consisting of nodes and links: 627 start 8 This symbol indicates a null reference.
Chapter 3: Arrays, Linked Lists, and Recursion
Stacks, Queues, and Deques
Stacks, Queues, and Deques. A stack is a last in, first out (LIFO) data structure –Items are removed from a stack in the reverse order from the way they.
Stacks, Queues, and Deques
Chapter 4 Linked Structures – Stacks Modified. Chapter Scope Object references as links Linked vs. array-based structures Managing linked lists Linked.
Data Structures and Algorithms Lecture 7,8 and 9 (Linked List) Instructor: Quratulain Date: 25, 29 September and 2 October, 2009 Faculty of Computer Science,
Arrays and Linked Lists "All the kids who did great in high school writing pong games in BASIC for their Apple II would get to college, take CompSci 101,
CSE 12 – Basic Data Structures Cynthia Bailey Lee Some slides and figures adapted from Paul Kube’s CSE 12 CS2 in Java Peer Instruction Materials by Cynthia.
Mohammad Amin Kuhail M.Sc. (York, UK) University of Palestine Faculty of Engineering and Urban planning Software Engineering Department Computer Science.
Information and Computer Sciences University of Hawaii, Manoa
CS 307 Fundamentals of Computer ScienceLinked Lists 1 Topic 14 Linked Lists "All the kids who did great in high school writing pong games in BASIC for.
4-1 Topic 6 Linked Data Structures. 4-2 Objectives Describe linked structures Compare linked structures to array- based structures Explore the techniques.
© 2005 Pearson Education, Inc., Upper Saddle River, NJ. All rights reserved. Data Structures for Java William H. Ford William R. Topp Chapter 13 Implementing.
1 Linked-list, stack and queue. 2 Outline Abstract Data Type (ADT)‏ Linked list Stack Queue.
1 Linked Structures, LinkedSet References as Links Linear Linked Lists and Non-linear Structures Managing Linked Lists Data Encapsulation Separate from.
(c) University of Washington16-1 CSC 143 Java Linked Lists Reading: Ch. 20.
(c) University of Washington16-1 CSC 143 Java Lists via Links Reading: Ch. 23.
Winter 2006CISC121 - Prof. McLeod1 Stuff Deadline for assn 3 extended to Monday, the 13 th. Please note that the testing class for assn 3 has changed.
Chapter 5 Linked Lists II
CS2006- Data Structures I Chapter 5 Linked Lists III.
Course: Object Oriented Programming - Abstract Data Types Unit2: ADT ListsSlide Number 1 Principles for implementing ADTs ADT operations as “walls” between.
Copyright © 0 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with Java From Control Structures through Data Structures by Tony.
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.
Page 1 – Spring 2010Steffen Vissing Andersen Software Development with UML and Java 2 SDJ I2, Spring 2010 Agenda – Week 8 Linked List (a reference based.
List Interface and Linked List Mrs. Furman March 25, 2010.
Recursive Objects (Part 2) 1. Adding to the front of the list  adding to the front of the list  t.addFirst('z') or t.add(0, 'z') 2 'a' 'x' LinkedList.
CSCS-200 Data Structure and Algorithms Lecture
Lists List Implementations. 2 Linked List Review Recall from CMSC 201 –“A linked list is a linear collection of self- referential structures, called nodes,
 2015, Marcus Biel, Linked List Data Structure Marcus Biel, Software Craftsman
Recursive Objects Singly Linked List (Part 2) 1. Operations at the head of the list  operations at the head of the list require special handling because.
Sequences 5/10/2018 2:01 PM Linked Lists Linked Lists.
Stacks.
Revision Based on: Linked Lists Revision Based on:
Programming Abstractions
Java collections library
LinkedList Class.
public class StrangeObject { String name; StrangeObject other; }
Topic 11 Linked Lists -Joel Spolsky
Queues 11/22/2018 6:47 AM 5.2 Queues Queues Dr Zeinab Eid.
Linked Lists.
Linked Lists [AJ 15].
[Chapter 4; Chapter 6, pp ] CSC 143 Linked Lists [Chapter 4; Chapter 6, pp ]
Programming Abstractions
Programming II (CS300) Chapter 07: Linked Lists and Iterators
Dynamic Data Structures and Generics
CS210- Lecture 5 Jun 9, 2005 Agenda Queues
Lecture 14 Linked Lists CSE /26/2018.
Programming II (CS300) Chapter 07: Linked Lists
TCSS 143, Autumn 2004 Lecture Notes
Linked Lists Chapter 5 (continued)
Topic 11 Linked Lists -Joel Spolsky
Presentation transcript:

Linked Lists Revision Based on: v/

Linked Lists LinkedList is an important data structure in OO languages such as Java and C# What you need to learn is how to write the implementation. Our philosophical principle: in pursuit of absolute simplicity. How: Divide, Conquer, and Glue

What to Do? Interface IList is given Two implementations are discussed: –Solution One: Doubly Linked List Class –Solution Two: Singly Linked List Class

Interface IList Interface IList has the following methods: a.boolean add( Object x) -- append to end of the list b.boolean add(int i, Object x) – insert at position i c.boolean remove(int i) – remove object at position i

Linked Lists A LinkedList implements the interface IList There are a number of ways in which a LinkedList can be implemented internally, but each implementation should provide the client (code that uses a LinkedList) with a single common set of operations that can be evoked by messages to the LinkedList object. Types of LinkedList implementations include: Doubly linked list Singly linked list We will examine how the main List operations are implemented in each of these alternatives

Linked Lists Doubly-linked List A LinkedList is a connected sequence of Nodes. It is composed of two classes of objects: LinkedLists and Nodes. class Node { //Node methods go here //attributes private Node pred, succ; private Object data; } class LinkedList implements IList { //class Node (see left) is declared here //implementation of List methods goes here //attributes private Node head, tail; private int size; } Node is an internal class visible only to LinkedList objects. The private attributes: pred and succ, have class scope and are thus indirectly accessible via the setter/getter methods in class LinkedList. BUT for the illustration purpose, we treat them as protect, which you can set and get a value for them.

Linked Lists predsuccdatapredsuccdata p This is the the Node that p points toThis Node is the successor of the Node that p points to Useful terminology for referring to Nodes in a LinkedList Nodes are not named objects, but are referred to by a “pointer” Node p = new Node(theObject); p.succ = new Node(nextObject);

Linked Lists LinkedList aList = new LinkedList( ); head size tail aList 0 aList.add( new Integer(24) ); 24 Integer temp = new Integer(24); Node p = new Node (temp); p if (head == 0) head = p; tail = p; size++; 1 aList.add( new Integer(21) ); Integer temp = new Integer(21); Node p = new Node(temp); p 21 //head != 0 tail.succ = p; p.pred = tail; tail = p; size++; 2

Linked Lists Putting it together public boolean add (Object theObj) { Node p = new Node(theObj); if (head == 0) head = p; else { tail.succ = p; p.pred = tail; } tail = p; size++; return true; }

Linked Lists Inserting an object at position i aList head size tail Insert at front of the list (i == 0) Integer temp = new Integer (3); Node p = new Node(temp); p 3 p.pred = 0; p.succ = head; The successor of Node referenced by p is Node referenced by head if (head != 0) head.pred = p; else (head ==0) -- inserting into an empty list -- set tail = p head = p; size++; 4

Linked Lists Inserting an object at position i aList head size tail Inserting at end of non-empty list (i==size) Integer temp = new Integer (3); Node p = new Node(temp); 41 p if (i == size) { //insert at end p.pred = tail; p’ s predecessor is the Node tail points to p.succ = 0; tail.succ = p; Make Node p points to the successor of Node tail points to tail = p; The Node p points to is now at the end of the list size++; 4

Linked Lists Inserting an object at position i aList head size tail Inserting at general position – (0 <= i < size) Integer temp = new Integer (23); Node p = new Node(temp); p 23 Move a handle to the Node at position i – Let i = 2 in this example int count = 0; Node q = head; q count = 0 while (count < i) { count++; q = q.getNext( ); } count = 1 q count = 2 q Insert new Node before the Node that q points to. p.pred = q.getPrev( )); p.succ = q; q.getPrev( ).succ = p; //3 q.pred = p; //4 size++; 4 The order of these statements is important – statement 3 MUST precede statement 4.

Linked Lists Putting it all together public boolean add(int i, Object x) { if (i size) { //range error System.err.println (“error – index out of range”); System.exit(1); //better – throw Exception } Node p = new Node(x); if (i ==0) { //insert at front p.pred = 0; //superfluous p.succ = head; if (head !=0) head.pred = p; else tail = p; head = p; } else if (i == size) { //insert at end p.succ = 0; p.pred = tail; tail.succ = p; tail = p; } else { //insert at general position int count = 0; Node q = head; while (count < i) { count++; q = q.getNext( ); } p.pred = q.getPrev( ); p.succ = q; q.getPrev( ).succ = p; q.pred = p; } size++; return true; } q.getPrev( ) returns a reference to the previous Node – Make the successor of that Node = p.

Linked Lists Removing objects from a List head size tail aList Remove first Node – (i == 0) Node p = head; if (i ==0) { //remove first Node head = p.getNext( ); if (head != 0) head.pred = 0; else //removing last node tail = 0; size--; } p 2 Automatic garbage collection reclaims the unreferenced Node when p goes out of scope.

Linked Lists Removing objects from a List head size tail aList Remove the last node – (i == size – 1) if (i ==size-1) { //remove last Node p = tail; //Node * p; set previously if (head != tail) { tail.getPrev().succ = 0; tail = tail.getPrev( ); } else { //removing last node tail = 0; head = 0; } size--; } p tail.getPrev( ) 2 Automatic garbage collection reclaims memory when p goes out of scope

Linked Lists Removing objects from a List head size tail aList Remove Node in general position – ( i ==1) Node p = head; int pos = 0; while (pos < i) { //find node to cut p = p.getNext( ); //move handle pos++; } p.getPrev( ).succ = p.succ; p.getNext( ).pred = p.pred; size--; } p pos = 0 p pos = 1 p.getPrev( )p.getNext( ) 2 The Node referenced by p is deleted when p goes out of scope

Linked Lists Bringing it all back home public boolean remove(int i) { if (i = size) { //range error System.err.println (“error – index out of range”); System.exit(1); } Node p; if (i == 0 ) // remove first node p = head; head = p.succ; if (head != 0) head.pred = 0; else tail = 0; } //end if else if (i == size-1) { //remove last node p = tail; if (head != tail) { tail.getPrev.succ = 0; tail = tail.getPrev( ); } else { head = 0; tail = 0; } } //end else if else { //remove Node in general position p = head; int pos = 0; while (pos < i ) { //move handle p = p.getNext( ); pos++ } p.getPrev.succ = p.succ; p.getNext.pred = p.pred; } //end else p.setPrev(0); p.setNext(0); //for safety size--; return true; } //end remove

Linked Lists Singly-linked Lists public class Node { public Node(Object x) {…} public void setNext( ) {…} public Node getNext( ) {…} public Object getData( ) {…} private Node succ; private Object data; } size head tail aList pp p Move two handles in sequence until p reaches position i – (let i = 2) Node p = head, q = head; q for(int pos = 0; pos < i; pos++) { q = p; p = p.getNext( ); } pos = 0 q pos = 1 pos =2 To perform an insert at pos, insert the new Node after the Node that q references and before the Node that p references To remove the Node at index pos, remove the Node that p references. Use the Node that q references to reattach the links. Implementing methods add( ) and remove( ) will be left as an exercise. datasucc