Download presentation

Presentation is loading. Please wait.

Published byThomas Kelly Modified over 3 years ago

1
Lists, Stacks, Queues, Trees, Hash Tables Basic Data Structures

2
Contents Abstract Data Types (ADT)Abstract Data Types (ADT) Lists – ArrayList ClassLists – ArrayList Class Stacks – Stack ClassStacks – Stack Class Queues – Queue ClassQueues – Queue Class Trees – Terminology and TypesTrees – Terminology and Types Dictionaries – HashMap ClassDictionaries – HashMap Class

3
Abstract Data Types An Abstract Data Type (ADT) is a data type together with the operations, whose properties are specified independently of any particular implementationAn Abstract Data Type (ADT) is a data type together with the operations, whose properties are specified independently of any particular implementation ADT are set of definitions of operations (like the interfaces in Java)ADT are set of definitions of operations (like the interfaces in Java) Can have several different implementationsCan have several different implementations Different implementations can have different efficiencyDifferent implementations can have different efficiency

4
Basic Data Structures Linear structuresLinear structures Lists: Variable-sizeLists: Variable-size Stacks: LIFO (last in first out) structureStacks: LIFO (last in first out) structure Queues: FIFO (first in first out) structureQueues: FIFO (first in first out) structure TreesTrees Dictionaries (maps)Dictionaries (maps) Contain pairs (key, value)Contain pairs (key, value) Hash tables: Unordered lists which use a hash function to insert and searchHash tables: Unordered lists which use a hash function to insert and search

5
What Is a List?

6
The List ADT List is linear data structure (container) that contains a sequence of elements (objects)List is linear data structure (container) that contains a sequence of elements (objects) Has variable sizeHas variable size Objects are arranged linearlyObjects are arranged linearly Can be implemented in several waysCan be implemented in several ways Statically (using array)Statically (using array) Dynamically (linked implementation)Dynamically (linked implementation) Using the ArrayList classUsing the ArrayList class

7
Static and Linked Lists

8
Static List Implemented by an arrayImplemented by an array Provide direct access by indexProvide direct access by index Usually has limited capacityUsually has limited capacity Resizing is slow operationResizing is slow operation Slow insert and deletionSlow insert and deletion L

9
Linked List Dynamic (pointer-based) implementationDynamic (pointer-based) implementation Different formsDifferent forms Singly-linked and doubly-linkedSingly-linked and doubly-linked Sorted and UnsortedSorted and Unsorted Singly-linked List - each Object hasvalue and next fieldsSingly-linked List - each Object hasvalue and next fields 11 next 7 next 18 next 14 next head null

10
11 next prev Linked List (2) Doubly-linked List - each Object hasvalue, next and prev fieldsDoubly-linked List - each Object hasvalue, next and prev fields head tail 7 next prev 18 next prev 14 next prev null null

11
Using the ArrayList class

12
The java.util.ArrayList Class Implements the list data structure using an array whose size is dynamically increased as neededImplements the list data structure using an array whose size is dynamically increased as needed Allocates in advance buffer space for new elements (for better performance)Allocates in advance buffer space for new elements (for better performance) Insertion methods:Insertion methods: add(Object) – adds an object at the endadd(Object) – adds an object at the end add(index, Object) – inserts an object to the list at a specified positionadd(index, Object) – inserts an object to the list at a specified position size() – returns the number of elementssize() – returns the number of elements

13
The ArrayList Class Deletion methods:Deletion methods: remove(Object) – removes the first occurrence of a specific objectremove(Object) – removes the first occurrence of a specific object remove(index) – removes the element at the specified positionremove(index) – removes the element at the specified position clear() – removes all elementsclear() – removes all elements Other supported methods:Other supported methods: contains(), toArray()contains(), toArray()

14
The ArrayList Class(2) ArrayList can contain any data typeArrayList can contain any data type Elements are added directlyElements are added directly Typecasting is required when extracting elements unless we use GenericsTypecasting is required when extracting elements unless we use Generics Converting to arrayConverting to array List list = new ArrayList(); list.add(5); // Add integer value list.add("some string"); // Add string value int firstElement = ((Integer)(list.get(0))).intValue(); String secondElement = (String)list.get(1); Integer[] arr = list.toArray(new Integer[list.size()]);

15
What are Generics Generics are classes or interfaces that can be instantiated with a variety of typesGenerics are classes or interfaces that can be instantiated with a variety of types They have 1 or more formal type parametersThey have 1 or more formal type parameters When using a generic you specify an actual typeWhen using a generic you specify an actual type List list = new ArrayList (); String s = new String("li1"); list.add(s); list.add(5); // This will cause compile time error Specifies that String is actual type of this List 5 is not a String

16
Primes[n..m] – Example Find all prime numbers in a specified intervalFind all prime numbers in a specified interval public static ArrayList public static ArrayList getPrimes(int start, int end) { getPrimes(int start, int end) { List primesList = List primesList = new ArrayList (); new ArrayList (); for (int num = start; num <= end; num++) { for (int num = start; num <= end; num++) { boolean prime = true; boolean prime = true; for (int div = 2; div <= Math.sqrt(num); div++) { for (int div = 2; div <= Math.sqrt(num); div++) { if (num % div == 0) { if (num % div == 0) { prime = false; prime = false; break; break; } } if (prime) { if (prime) { primesList.add(num); primesList.add(num); } } return primesList; return primesList;}

17
Primes[n..m] Live Demo

18
Union and Intersection of Lists – Example public static Integer[] union(Integer[] firstArr, Integer[] secondArr) { List union = new ArrayList (); List union = new ArrayList (); for (Integer item : firstArr) { for (Integer item : firstArr) { union.add(item); union.add(item); } for (Integer item : secondArr) { for (Integer item : secondArr) { if (!union.contains(item)) { if (!union.contains(item)) { union.add(item); union.add(item); } } return union.toArray(new Integer[union.size()]); return union.toArray(new Integer[union.size()]);} //Example continues...

19
Union and Intersection of Lists – Example(2) public static Integer[] intersect(Integer[] firstArr, Integer[] secondArr) { List intersect = List intersect = new ArrayList (); for (Integer item : firstArr) { for (Integer item : firstArr) { if (Arrays.binarySearch(secondArr, item) >= 0) { if (Arrays.binarySearch(secondArr, item) >= 0) { intersect.add(item); intersect.add(item); } } return intersect.toArray( return intersect.toArray( new Integer[intersect.size()]); }

20
Union and Intersection Live Demo

21
What is a Stack?

22
The Stack ADT LIFO (last in first out) structureLIFO (last in first out) structure Elements inserted (push) at topElements inserted (push) at top Elements removed (pop) from topElements removed (pop) from top Can be implemented in several waysCan be implemented in several ways Statically (using array)Statically (using array) Dynamically (linked implementation)Dynamically (linked implementation) Using the Stack classUsing the Stack class

23
Static Stack Array-based (static) implementationArray-based (static) implementation Usually has limited capacityUsually has limited capacity Has top variable, pointing to the topHas top variable, pointing to the top IsEMPTY(S)IsEMPTY(S) Check if S.top = -1Check if S.top = S top

24
Linked Stack Dynamic (pointer-based) implementationDynamic (pointer-based) implementation Each object has value and next fieldsEach object has value and next fields Dynamically create and delete objectsDynamically create and delete objects 11 next 7 next 18 next 14 next top null

25
Using the Stack class

26
The Stack Class – Overview Implements the stack data structure using an array whose size is dynamically increased as neededImplements the stack data structure using an array whose size is dynamically increased as needed Major methods:Major methods: push(object) – inserts elements to the stackpush(object) – inserts elements to the stack pop() – removes and returns the top element from the stackpop() – removes and returns the top element from the stack peek() – returns the top element of the stack without removing itpeek() – returns the top element of the stack without removing it

27
The Stack Class – More Methods Other methods:Other methods: size() – returns the number of elementssize() – returns the number of elements clear() – removes all elementsclear() – removes all elements contains(object) – determines whether given element is in the stackcontains(object) – determines whether given element is in the stack toArray() – converts the stack to arraytoArray() – converts the stack to array

28
Using the Stack class Examples

29
Stack – Example Using push(), pop() and peek() methodsUsing push(), pop() and peek() methods public static void main(String[] args) { Stack stack = new Stack (); Stack stack = new Stack (); stack.push("1. Ivan"); stack.push("1. Ivan"); stack.push("2. Nikolay"); stack.push("2. Nikolay"); stack.push("3. Maria"); stack.push("3. Maria"); stack.push("4. George"); stack.push("4. George"); System.out.println("Top = " + stack.peek()); System.out.println("Top = " + stack.peek()); while (stack.size() > 0) { while (stack.size() > 0) { String personName = stack.pop(); String personName = stack.pop(); System.out.println(personName); System.out.println(personName); }}

30
Using the Stack class Live Demo

31
Matching Brackets – Example We are given an arithmetical expression with brackets that can be nested. We want to extract all parts of the expression that are closed in brackets.We are given an arithmetical expression with brackets that can be nested. We want to extract all parts of the expression that are closed in brackets. Example: 1 + ( (2+3) * 4 - ((3+1)*(4-2)))Example: 1 + ( (2+3) * 4 - ((3+1)*(4-2))) Result:Result: (2+3)(2+3) (3+1)(3+1) (4-2)(4-2) ((3+1)*(4-2))((3+1)*(4-2)) ( (2+3) * 4 - ((3+1)*(4-2)))( (2+3) * 4 - ((3+1)*(4-2)))

32
Matching Brackets – Solution with a Stack String expression = "1 + ( (2+3) * 4 - ((3+1)*(4-2)))"; Stack stack = new Stack (); for (int i = 0; i < expression.length(); i++) { char ch = expression.charAt(i); char ch = expression.charAt(i); if (ch == '(') { if (ch == '(') { stack.push(i); stack.push(i); } else if (ch == ')') { } else if (ch == ')') { int startIndex = (int) stack.pop(); int startIndex = (int) stack.pop(); String contents = String contents = expression.substring(startIndex, i + 1); System.out.println(contents); System.out.println(contents); }}

33
Matching Brackets Live Demo

34
What is a Queue?

35
The Queue ADT FIFO (first in first out) structureFIFO (first in first out) structure Elements inserted at tail (enqueue)Elements inserted at tail (enqueue) Elements removed from head (dequeue)Elements removed from head (dequeue) Useful in many situationsUseful in many situations Processing jobs, print queues, messagesProcessing jobs, print queues, messages Can be implemented in several waysCan be implemented in several ways Statically (using array)Statically (using array) Dynamically (using pointers)Dynamically (using pointers) Using the LinkedList classUsing the LinkedList class

36
Static Queue Static (array-based) implementationStatic (array-based) implementation Queue has limited (fixed) capacityQueue has limited (fixed) capacity Implement as a circular arrayImplement as a circular array Maintain Q.Capacity and Q.LengthMaintain Q.Capacity and Q.Length Has head and tail variables, pointingHas head and tail variables, pointing to the head and the tail Q head tail

37
Linked Queue Dynamic (pointer-based) implementationDynamic (pointer-based) implementation Each object has value and next fieldsEach object has value and next fields Dynamically create and delete objectsDynamically create and delete objects 11 next 7 next 18 next 14 next head tail null

38
Using the LinkedList class

39
The LinkedList Class – Overview Implements the queue data structure using a doubly-linked listImplements the queue data structure using a doubly-linked list Major methods:Major methods: offer(object) – adds an object to the end of the queueoffer(object) – adds an object to the end of the queue poll() – removes and returns the object at the beginning of the queuepoll() – removes and returns the object at the beginning of the queue peek() – returns the object at the beginning of the queue without removing itpeek() – returns the object at the beginning of the queue without removing it

40
The LinkedList Class – More Methods Other methods:Other methods: size() – gets the number of elements contained in the queuesize() – gets the number of elements contained in the queue clear() – removes all elements from the queueclear() – removes all elements from the queue contains(object) – determines whether given element is in the queuecontains(object) – determines whether given element is in the queue toArray() – converts the queue to arraytoArray() – converts the queue to array

41
Using the LinkedList class Examples

42
Queue – Example Using offer() and poll() methodsUsing offer() and poll() methods public static void main(String[] args) { Queue queue = new LinkedList (); Queue queue = new LinkedList (); queue.offer("Message One"); queue.offer("Message One"); queue.offer("Message Two"); queue.offer("Message Two"); queue.offer("Message Three"); queue.offer("Message Three"); queue.offer("Message Four"); queue.offer("Message Four"); queue.offer("Message Five"); queue.offer("Message Five"); while (queue.size() > 0) { while (queue.size() > 0) { String msg = queue.poll(); String msg = queue.poll(); System.out.println(msg); System.out.println(msg); }}

43
Using the LinkedList class Live Demo

44
Sequence N, N+1, 2*N We are given the sequence:We are given the sequence: S = N, N+1, 2*N, N+2, 2*(N+1), 2*N+1, 4*N,... Write a program to find the first index of given number PWrite a program to find the first index of given number P Example: N = 3, P = 16Example: N = 3, P = 16 S = 3, 4, 6, 5, 8, 7, 12, 6, 10, 9, 16, 8, 14,... Index of P = *2* *2* *2*2

45
Sequence – Solution int n = 3; int p = 16; Queue queue = new LinkedList (); queue.offer(n); int index = 0; while (queue.size() > 0) { index++; index++; int current = queue.poll(); int current = queue.poll(); if (current == p) { if (current == p) { System.out.println("Index = " + index); System.out.println("Index = " + index); return; return; } queue.offer(current + 1); queue.offer(current + 1); queue.offer(2 * current); queue.offer(2 * current);}

46
Sequence N, N+1, 2*N Live Demo

47
What is Tree? Definition, Types of Trees

48
Trees TerminologyTerminology Node, edge, root, child, children, siblings, parent, ancestor, descendant, predecessor, successor, internal node, leaf, depth, heightNode, edge, root, child, children, siblings, parent, ancestor, descendant, predecessor, successor, internal node, leaf, depth, height Height = 2 Depth 0 Depth 1 Depth 2

49
Binary Trees Binary trees: most used formBinary trees: most used form Each node has at most 2 childrenEach node has at most 2 children right child left subtree rootroot left child

50
Binary Trees Traversals Traversal can be done in pre-order, in-order and post-orderTraversal can be done in pre-order, in-order and post-order Pre-order: left, root, right – 6, 9, 12, 17, 19, 25Pre-order: left, root, right – 6, 9, 12, 17, 19, 25 In-order: root, left, right – 17, 9, 6, 12, 19, 25In-order: root, left, right – 17, 9, 6, 12, 19, 25 Post-order: left, right, root – 6, 12, 9, 25, 19, 17Post-order: left, right, root – 6, 12, 9, 25, 19,

51
Binary Search Trees Binary search trees are orderedBinary search trees are ordered A binary tree in which binary-search-tree property holds:A binary tree in which binary-search-tree property holds: For each node x in the treeFor each node x in the tree All the elements of the left subtree of x are xAll the elements of the left subtree of x are x All the elements of the right subtree of x are > xAll the elements of the right subtree of x are > x Binary search trees can be balancedBinary search trees can be balanced Balanced trees has low heightBalanced trees has low height

52
Binary Search Trees Example of binary search treeExample of binary search tree If the tree is balanced, adding, searching, and deletion operations take approx. log(n) stepsIf the tree is balanced, adding, searching, and deletion operations take approx. log(n) steps

53
What is a Dictionary (Map)?

54
The Dictionary (Map) ADT The ADT "dictionary" maps key to valuesThe ADT "dictionary" maps key to values Also known as "map" or "associative array"Also known as "map" or "associative array" Contains a set of (key, value) pairsContains a set of (key, value) pairs Dictionary ADT operations:Dictionary ADT operations: ADD(key, value)ADD(key, value) FIND_BY_KEY(key) valueFIND_BY_KEY(key) value DELETE(key)DELETE(key) Can be implemented in several waysCan be implemented in several ways List, array, hash table, balanced tree,...List, array, hash table, balanced tree,...

55
What is a Hash Table?

56
Hash Table A hash table is an array that holds a set of (key, value) pairsA hash table is an array that holds a set of (key, value) pairs The process of mapping a key to a position in a table is called hashingThe process of mapping a key to a position in a table is called hashing m T h(k)

57
Hash Functions and Hashing A hash function maps keys to positionsA hash function maps keys to positions It is denoted by hIt is denoted by h The hash table has m slots, indexed from 0 to m-1The hash table has m slots, indexed from 0 to m-1 For any value k in the key range and some hash function hFor any value k in the key range and some hash function h h(k) = i h(k) = i 0 i < m m T h(k)

58
Mapping Functions Perfect hashing function (PHF)Perfect hashing function (PHF) h(k) : one-to-one mapping from each key k to integers in [0, m-1]h(k) : one-to-one mapping from each key k to integers in [0, m-1] The PHF maps each key to a distinct integer within some manageable rangeThe PHF maps each key to a distinct integer within some manageable range Finding a perfect hashing function is in most cases impossibleFinding a perfect hashing function is in most cases impossible More realisticallyMore realistically Hash functions h(k) map most of the keys onto unique integers, but not allHash functions h(k) map most of the keys onto unique integers, but not all

59
Collisions in Hash Tables Collision is the situation when different keys can have the same hash valueCollision is the situation when different keys can have the same hash value h(k 1 ) = h(k 2 ) for k 1 k 2 When the number of collisions is sufficiently small, the hash tables work quite well (fast)When the number of collisions is sufficiently small, the hash tables work quite well (fast) Several collisions resolution strategiesSeveral collisions resolution strategies Chaining in a list, re-hashing, using the neighboring slots (linear probing),...Chaining in a list, re-hashing, using the neighboring slots (linear probing),...

60
Collision Resolution - Chaining h("Pesho") = 4h("Lili") = n-1 h("Kiro") = 2 h("Mimi") = 1 h("Ivan") = 2 h("Pesho") = 4h("Lili") = n-1 h("Kiro") = 2 h("Mimi") = 1 h("Ivan") = 2 null T n-1 null... null chainingchaining Kiro Ivan collisioncollision null Mimi null Lili null Pesho null

61
Using the HashMap class

62
The HashMap Class – Overview Implements the ADT dictionary as array dynamically increased as neededImplements the ADT dictionary as array dynamically increased as needed Contains a collection of key-and-value pairs arranged by the hash code of the keyContains a collection of key-and-value pairs arranged by the hash code of the key Collisions are resolved by chainingCollisions are resolved by chaining The HashMap class relies onThe HashMap class relies on Object.hashCode() method for calculating the hash codes of the elementsObject.hashCode() method for calculating the hash codes of the elements Object.equals() method for comparing elementsObject.equals() method for comparing elements

63
The HashMap Class – Major Operations Major operations:Major operations: put(key, value) – adds an element with the specified key and value into the hash tableput(key, value) – adds an element with the specified key and value into the hash table remove(key) – removes the element with the specified key from the hash tableremove(key) – removes the element with the specified key from the hash table get(key) – returns element by keyget(key) – returns element by key clear() – removes all elements from the hash tableclear() – removes all elements from the hash table

64
The HashMap Class – More Operations More operations:More operations: size() – returns the number of elementssize() – returns the number of elements containsKey(key) – determines whether the hash table contains given keycontainsKey(key) – determines whether the hash table contains given key containsValue(value) – determines whether the hash table contains given valuecontainsValue(value) – determines whether the hash table contains given value keySet() – returns a set of the keyskeySet() – returns a set of the keys values() – returns a collection of the valuesvalues() – returns a collection of the values

65
Using the HashMap Class Examples

66
Hashtable - Example Map studentsMarks = new HashMap (); studentsMarks.put("Ivan", 4); studentsMarks.put("Peter", 6); studentsMarks.put("Maria", 6); studentsMarks.put("George", 5); int peterMark = studentsMarks.get("Peter"); studentsMarks.remove("Peter"); System.out.println("Is Peter in the hash table: " + studentsMarks.containsKey("Peter")); for (Map.Entry studentMark : studentsMarks.entrySet()) { System.out.printf("%s --> %d%n", System.out.printf("%s --> %d%n", studentMark.getKey(), studentMark.getValue()); }

67
Using the HashMap Class Live Demo

68
Counting Words in a Text String s = "Welcome to our Java course. In this " + "course you will learn how to write simple " + "programs in Java"; String[] words = s.split("[,.]"); Map wordsCount = new HashMap (); for (String word : words) if (!"".equalsIgnoreCase(word)) { int count = 1; if (wordsCount.containsKey(word)) count += wordsCount.get(word); wordsCount.put(word, count); } for (String word : wordsCount.keySet()) System.out.printf("%s --> %d%n", word, wordsCount.get(word));

69
Counting Words in a Text Live Demo

70
Summary ADT are defined by list of operations independent of the implementationADT are defined by list of operations independent of the implementation The basic data structures in the computer programming areThe basic data structures in the computer programming are List – ArrayList class in JavaList – ArrayList class in Java Stack – Stack class in JavaStack – Stack class in Java Queue – LinkedList class in JavaQueue – LinkedList class in Java Trees – can be binary, balanced, search trees, etc.Trees – can be binary, balanced, search trees, etc. Dictionaries – HashMap class in JavaDictionaries – HashMap class in Java

71
Basic Data Structures Questions?Questions?

72
Exercises 1.Write a program that reads from the console a sequence of positive integer numbers. The sequence ends when the number 0 is entered. Calculate and print the sum and average of the elements of the sequence. Use the ArrayList class. 2.Write a method that finds the longest subsequence of equal numbers in given array. Use the ArrayList class. 3.Write a program that reads N integers from the console and reverses them using a stack. Use the Stack class.

73
Exercises (2) 4.We are given the following sequence: S 1 = N; S 2 = S 1 + 1; S 3 = 2*S 1 + 1; S 4 = S 1 + 2; S 5 = S 2 + 1; S 6 = 2*S 2 + 1; S 7 = S 2 + 2;... Write a program to print its first 100 elements for given N. Use the LinkedList class. Example: N=2 Sequence: 2, 3, 5, 4, 4, 7, 5, 6, 11, 7, 5, 9, 6,...

74
Exercises (3) 5.Write a program that reads a sequence of integers ending with 0 and sorts them in an increasing order. Use the ArrayList class. 6.Write a program that finds in a given array of integers how many times each of them presents. Use HashMap and ArrayList. Example: array = {3, 4, 4, 2, 3, 3, 4, 3, 2} 2 2 times 3 4 times 4 3 times

75
Exercises (4) 7.Write a program that removes from a given sequence all negative numbers. 8.Write a program that removes from a given sequence all the numbers that present in it odd number of times. Example: {4, 2, 2, 5, 2, 3, 2, 3, 1, 5, 2} {5, 3, 3, 5} 9.By definition the majorant of an array is a value that occur in the least half of the elements of the array. Write a program to find the majorant of given array (if any). Example: {2, 2, 3, 3, 2, 3, 4, 3, 3} 3

76
Exercises (7) 10.Write a program that counts how many times each word from a given text presents in it. The casing differences should be ignored. The result words should be ordered by their number of occurrences in the text. Example: is 2 the 2 this 3 text 6 This is the TEXT. Text, text, text – THIS TEXT! Is this the text?

77
Exercises (5) 11.We are given numbers N and M and the following operations: a)N = N+1 b)N = N+2 c)N = N*2 Write a program that finds the shortest sequence of operations from the list above that starts from N and finishes in M Example: N = 5, M = 16Example: N = 5, M = 16 Sequence: Sequence:

78
Exercises (6) 12.We are given a labyrinth of size N x N. Some of its cells are empty (0) and some are full (x). We can move from an empty cell to another empty cell if they share common wall. Given a starting position (*) calculate and fill in the array the minimal distance from this position to any other cell in the array. Use "u" for the unreachable cells. Example: 000x0x0x0x0x 0*x0x0 0x xx0 000x0x345xux2x6xux 1*x8x10 2x xx10 456xux

Similar presentations

© 2017 SlidePlayer.com Inc.

All rights reserved.

Ads by Google