Dynamic Array. An Array-Based Implementation - Summary Good things:  Fast, random access of elements  Very memory efficient, very little memory is required.

Slides:



Advertisements
Similar presentations
Linked Lists Geletaw S..
Advertisements

Singly linked lists Doubly linked lists
Lists CS 3358.
Linked Lists.
DATA STRUCTURES USING C++ Chapter 5
Lecture 6 Sept 11, 2008 Goals for the day: Linked list and project # 1 list class in STL (section 3.3) stack – implementation and applications.
M180: Data Structures & Algorithms in Java
Today’s Agenda  Stacks  Queues  Priority Queues CS2336: Computer Science II.
Data Structures: A Pseudocode Approach with C
Linked Lists Compiled by Dr. Mohammad Alhawarat CHAPTER 04.
Linked Lists
An Array-Based Implementation of the ADT List public class ListArrayBased implements ListInterface { private static final int MAX_LIST = 50; private Object.
Linked Lists. Preliminaries Options for implementing an ADT List Array Has a fixed size Data must be shifted during insertions and deletions Dynamic array.
CMPT 225 ADT List using Dynamic arrays A dynamic data structure is one that changes size, as needed, as items are inserted or removed The Java ArrayList.
© 2006 Pearson Addison-Wesley. All rights reserved5 A-1 Chapter 5 Linked Lists.
Chapter 4 Linked Structures. Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 4-2 Chapter Objectives Describe the use of references to create.
Chapter 4 Linked Lists. © 2005 Pearson Addison-Wesley. All rights reserved4-2 Preliminaries Options for implementing an ADT List –Array has a fixed size.
2 Preliminaries Options for implementing an ADT List Array has a fixed size Data must be shifted during insertions and deletions Linked list is able to.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy.
Implementation of Linked List For more notes and topics visit: eITnotes.com.
Data Structures Week 5 Further Data Structures The story so far  We understand the notion of an abstract data type.  Saw some fundamental operations.
Stacks - 2 Nour El-Kadri ITI Implementing 2 stacks in one array and we don’t mean two stacks growing in the same direction: but two stacks growing.
Adapted from instructor resources Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights.
Lists Ellen Walker CPSC 201 Data Structures Hiram College.
Arrays Tonga Institute of Higher Education. Introduction An array is a data structure Definitions  Cell/Element – A box in which you can enter a piece.
Lists. Container Classes Many applications in Computer Science require the storage of information for collections of entities e.g. a student registration.
Lists II. List ADT When using an array-based implementation of the List ADT we encounter two problems; 1. Overflow 2. Wasted Space These limitations are.
A first look an ADTs Solving a problem involves processing data, and an important part of the solution is the careful organization of the data In order.
4-1 Topic 6 Linked Data Structures. 4-2 Objectives Describe linked structures Compare linked structures to array- based structures Explore the techniques.
1 Linked-list, stack and queue. 2 Outline Abstract Data Type (ADT)‏ Linked list Stack Queue.
1 Data Structures CSCI 132, Spring 2014 Lecture 20 Linked Lists.
Lists Chapter 8. 2 Linked Lists As an ADT, a list is –finite sequence (possibly empty) of elements Operations commonly include: ConstructionAllocate &
Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy Walters, and Godfrey Muganda Chapter 17: Linked Lists.
Copyright © 2012 Pearson Education, Inc. Chapter 17: Linked Lists.
Copyright © 0 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with Java From Control Structures through Data Structures by Tony.
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 Linked Lists (Lec 6). 2  Introduction  Singly Linked Lists  Circularly Linked Lists  Doubly Linked Lists  Multiply Linked Lists  Applications.
Data Structures. Abstract Data Type A collection of related data is known as an abstract data type (ADT) Data Structure = ADT + Collection of functions.
Chapter 5 Linked List by Before you learn Linked List 3 rd level of Data Structures Intermediate Level of Understanding for C++ Please.
Chapter Lists Dr. Bernard Chen Ph.D. University of Central Arkansas Spring 2010.
CS 201 Data Structures and Algorithms Chapter 3: Lists, Stacks, and Queues - I Text: Read Weiss, §3.1 – 3.5 1Izmir University of Economics.
2005MEE Software Engineering Lecture 7 –Stacks, Queues.
1 Linked List. Outline Introduction Insertion Description Deletion Description Basic Node Implementation Conclusion.
Linked List. LINKED LIST Link is collection of similar type of elements. There are two ways of maintaining a list in memory. The first way is store the.
Data Structure & Algorithms
1 Linked List. 2 List A list refers to a sequence of data items  Example: An array The array index is used for accessing and manipulation of array elements.
Linked Lists Chapter Introduction To The Linked List ADT Linked list: set of data structures (nodes) that contain references to other data structures.
1 CMPT 117 Linked Lists (singly linked). 2 Problems with arrays  When an element is deleted from or inserted into an array, the rest of the array has.
3/19/2016 5:40 PMLinked list1 Array-based List v.s. Linked List Yumei Huo Department of Computer Science College of Staten Island, CUNY Spring 2009.
Data Structures and Algorithm Analysis Dr. Ken Cosh Linked Lists.
Data Structure and Algorithm: CIT231 Lecture 6: Linked Lists DeSiaMorewww.desiamore.com/ifm1.
LINKED LISTS.
An Array-Based Implementation of the ADT List
Unit – I Lists.
CSCI-255 LinkedList.
Linked Lists Chapter 6 Section 6.4 – 6.6
Chapter 5 Linked Lists © 2011 Pearson Addison-Wesley. All rights reserved.
Data Structure and Algorithms
Lists CS 3358.
LINKED LISTS CSCD Linked Lists.
Introduction to Linked Lists
CMSC 341 Lecture 5 Stacks, Queues
Object Oriented Programming COP3330 / CGS5409
Arrays and Linked Lists
Linked List Intro CSCE 121 J. Michael Moore.
Linked Lists.
CS2013 Lecture 4 John Hurley Cal State LA.
Data Structures & Algorithms
Chapter 5 Linked Lists © 2011 Pearson Addison-Wesley. All rights reserved.
Linked List Intro CSCE 121.
Presentation transcript:

Dynamic Array

An Array-Based Implementation - Summary Good things:  Fast, random access of elements  Very memory efficient, very little memory is required other than that needed to store the contents (but see bellow) Bad things:  Slow deletion and insertion of elements  Size must be known when the array is created and is fixed (static)

ADT List using Dynamic arrays A dynamic data structure is one that changes size, as needed, as items are inserted or removed  The Java ArrayList class is implemented using a dynamic array There is usually no limit on the size of such structures, other than the size of main memory Dynamic arrays are arrays that grow (or shrink) as required  In fact a new array is created when the old array becomes full by creating a new array object, copying over the values from the old array and then assigning the new array to the existing array reference variable

Dynamic Array 6178 top =

Dynamic Array 6178 top = insert 5

Dynamic Array top =

Dynamic Array top = insert 2

Dynamic Array top = insert 3

Dynamic Array top = insert 3 !The array is full and there is no room for a new item!

Dynamic Array top = insert 3 So we will create a new, bigger array …

Dynamic Array top = insert So we will create a new, bigger array …

Dynamic Array top = insert … copy the elements of the old array into it …

Dynamic Array top = insert 3 … copy the elements of the old array into it …

Dynamic Array insert … and finally insert 3 into the new array. top =

Dynamic Array top = The old array will eventually be deleted by Java’s garbage collector

insert(itemType x){ if(top < capacity){ //there is room to insert x items[top++]=x; } else{ //there is no room to insert x. //the array has to be expanded. expand(); //inset x as usual items[top++]=x; } expand(){ capacity = 2*capacity; itemType newItems[] = new itemTypes(capacity); for(i=0 through top-1) newItems[i] = items[i]; items = newItems; }

Dynamic Array Summary Before every insertion, check to see if the array needs to grow Question: When growing array, how much to grow it?  Memory efficient? (by 1)  Time efficient?

Dynamic Array Summary Before every insertion, check to see if the array needs to grow Growing by doubling works well in practice, because it grows very large very quickly  10, 20, 40, 80, 160, 320, 640, 1280, …  Very few array re-sizings must be done  To insert n items you need to do  log(n) re-sizings While the copying operation is expensive it does not have to be done often

Dynamic Array Problems When the doubling does happen it may be time- consuming And, right after a doubling half the array is empty Re-sizing after each insertion would be prohibitively slow The classes java.util.Vector and java.util.ArrayList use a similar technique to implement a growable array of objects.

import java.util.Vector; public class VectorTest{ public static void main(){ Vector v = new Vector(); //inserting elements into the Vector for(int i=0; i<100; i++) v.add(new Integer(i)); //deleting elements from the vector while(!v.isEmpty()) //remove the last element. System.out.println(v.remove(v.size()-1)); } Output: … 0

Linked Lists.

Options for implementing an ADT List Array  Advantages Fast random access of elements (takes constant to access an element). Efficient in terms of memory usage (almost no memory overhead)  Disadvantages Has a fixed size Data must be shifted during insertions and deletions Dynamic array  Advantages Fast random access of elements. Efficient in terms of memory usage (almost no memory overhead)  Disadvantages Data must be shifted during insertions and deletions Data must be copied during the resizing of the array Linked list  Advantages Is able to grow in size as needed Does not require the shifting of items during insertions and deletions  Disadvantage Accessing an element does not take a constant time Need to store links to maintain the logical order of the elements (memory overhead).

Why random access is fast in array? The elements in an array are stored at consecutive locations in the main memory. Therefore if we know the address of the first element in the array and the size of each element we can easily calculate the address of any element of the array in the main memory.

… … Example The int stored at grade[2] is located at byte: * 4 = 1290 grade Stores a reference to the start of the array, in this case byte 1282 int grade[]=new int[4]; grade[2]=23;

In general address of the element at index = address of first element + index * size of stored type The above calculation can be done in constant time no matter what the value of the index is. However, to maintain the physical order of the elements in the array we may need to shift some elements when inserting new elements or deleting an element from the array. Suppose an array has n elements.  In the best case we do not need to shift element when an new element is inserted at the end of array (0 shifts)  In the worst case we need to shift all the elements down when an element is inserted in the beginning of the array (n shifts)  Therefore on average we need to do (0+n)/2 shifts for inserting a random element in the array.  Normally, when we talk about the complexity of operations (i.e the number of steps needed to perform that operation) we don’t care about the multiplied or added constants.  Therefore, we simply say the insert operation is of order of n or is O(n).

If you need to use a list in a context where insertion and deletion are very often then the array-based implementation of the list in not the best solution. In this context a link list implementation of the list is a more efficient solution.

Linked Lists A linked list is a dynamic data structure consisting of nodes and links: 627 start 8 This symbol indicates a null reference

The physical location of the nodes in the main memory are random (i.e there is no relation between the logical order and the physical order of the elements of a linked list). Therefore the logical order of the elements are maintained through the links.

Linked Lists Each node contains two things  The data  A pointer to the next node 7

Linked Lists class Node { public int data; public Node next; } 7

Linked Lists class Node { public int data; public Node next; } 7 A node points to another node, so the pointer must be of type Node

Building a Linked List Node a = new Node(7, null); a Assume we’ve added a constructor to the Node class that lets us initialize data and next like this. 7

Building a Linked List Node a = new Node(7, null); a.next = new Node(3, null); a 7 3 a.nexta.data a.next.data

Traversing a Linked List Node a = new Node(7, null); a.next = new Node(3, null); Node p = a; a 7 3 p

Building a Linked List Node a = new Node(7, null); a.next = new Node(3, null); Node p = a; p = p.next; // go to the next node a 7 3 We can walk through a linked list by traversing nodes one by one. p

Traversing a Linked List Node a = new Node(7, null); a.next = new Node(3, null); Node p = a; p = p.next; // go to the next node p = p.next; a 7 3 Eventually, p hits the end of the list and becomes null. p

Traversing a Linked List The link field of the last node in the list is always null. Therefore, if you have the reference to the first node in the list (called head) you can traverse the list (i.e visit all the nodes) using a simple while loop

Example: printing the elements of the list. void public printList(Node head){ while (head != NULL){ System.out.println(head.data); head = head.next; }