Processing Sequences of Elements

Slides:



Advertisements
Similar presentations
Software Testing Lifecycle Exit Criteria Evaluation, Continuous Integration Ivan Yonkov Technical Trainer Software University.
Advertisements

Test-Driven Development Learn the "Test First" Approach to Coding SoftUni Team Technical Trainers Software University
Arrays, Lists, Stacks, Queues Processing Sequences of Elements SoftUni Team Technical Trainers Software University
Operators and Expressions
Sets, Dictionaries SoftUni Team Technical Trainers Software University
Inheritance Class Hierarchies SoftUni Team Technical Trainers Software University
Stacks and Queues Processing Sequences of Elements SoftUni Team Technical Trainers Software University
Generics SoftUni Team Technical Trainers Software University
Strings and Text Processing
Graphs and Graph Algorithms
Version Control Systems
Auto Mapping Objects SoftUni Team Database Applications
Static Members and Namespaces
Functional Programming
Databases basics Course Introduction SoftUni Team Databases basics
Abstract Classes, Abstract Methods, Override Methods
Sets, Hash table, Dictionaries
C# Basic Syntax, Visual Studio, Console Input / Output
Interface Segregation / Dependency Inversion
Data Structures Course Overview SoftUni Team Data Structures
Introduction to MVC SoftUni Team Introduction to MVC
PHP MVC Frameworks Course Introduction SoftUni Team Technical Trainers
Reflection SoftUni Team Technical Trainers Java OOP Advanced
/^Hel{2}o\s*World\n$/
Linear Data Structures: Stacks and Queues
Classes, Properties, Constructors, Objects, Namespaces
Mocking tools for easier unit testing
PHP MVC Frameworks MVC Fundamentals SoftUni Team Technical Trainers
Using Streams, Files, Serialization
Heaps and Priority Queues
Repeating Code Multiple Times
Inheritance Class Hierarchies SoftUni Team Technical Trainers C# OOP
Java OOP Overview Classes and Objects, Members and Class Definition, Access Modifier, Encapsulation Java OOP Overview SoftUni Team Technical Trainers.
Basic Tree Data Structures
Data Definition and Data Types
Databases advanced Course Introduction SoftUni Team Databases advanced
Arrays, Lists, Stacks, Queues
Balancing Binary Search Trees, Rotations
Debugging and Troubleshooting Code
Entity Framework: Relations
Fast String Manipulation
Array and List Algorithms
Functional Programming
ASP.NET Razor Engine SoftUni Team ASP.NET MVC Introduction
Processing Variable-Length Sequences of Elements
Regular Expressions (RegEx)
C# Advanced Course Introduction SoftUni Team C# Technical Trainers
Databases Advanced Course Introduction SoftUni Team Databases Advanced
Combining Data Structures
Best practices and architecture
Arrays and Multidimensional Arrays
Built-in Functions. Usage of Wildcards
Multidimensional Arrays, Sets, Dictionaries
Extending functionality using Collections
Exporting and Importing Data
Language Comparison Java, C#, PHP and JS SoftUni Team
Functional Programming
ASP.NET Razor Engine SoftUni Team ASP.NET MVC Introduction
C# Advanced Course Introduction SoftUni Team C# Technical Trainers
Exporting and Importing Data
CSS Transitions and Animations
Iterators and Comparators
Version Control Systems
Polymorphism, Interfaces, Abstract Classes
Text Processing and Regex API
/^Hel{2}o\s*World\n$/
Files, Directories, Exceptions
CSS Transitions and Animations
Iterators and Generators
Multidimensional Arrays
Presentation transcript:

Processing Sequences of Elements Stacks and Queues Processing Sequences of Elements Advanced Java SoftUni Team Technical Trainers Software University http://softuni.bg

Table of Contents Stack<E> (LIFO – last in, first out) * Table of Contents Stack<E> (LIFO – last in, first out) Stack Functionality - push(), pop(), peek() Stack Utilities - toArray(), contains() and size() Exercises on Stack<E> Queue<E> (FIFO – first in, first out) Queue Functionality – offer(), poll() Queue Functionality - toArray(), contains(), size() Exercises on Queue<E> (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*

Questions sli.do #JavaAdvanced

Stack Last In First Out 2 10 5

Stack – Abstract Data Type Stacks provide the following functionality: Pushing an element at the top of the stack Popping element from the top fo the stack Getting the topmost element without removing it 2 10 5 2 10 5 2 10 5 Push Pop Peek

ArrayDeque<E> – Java Stack Implementation Creating a Stack Adding elements at the top of the stack ArrayDeque<Integer> stack = new ArrayDeque<>(); stack.push(element);

ArrayDeque<E> – Java Stack Implementation (2) Removing elements Getting the value of the topmost element Integer element = stack.pop(); Integer element = stack.peek();

push() – Adds an element on top of the Stack 5 10 2 Stack<Integer> 3 2 1 size():

pop() – Returns the last element from the stack and removes it Stack<Integer> 1 2 3 size(): 2 10 5

Stack<Integer> peek() – Returns the last element from the stack, but does not remove it Stack<Integer> 1 size(): 5 5

Problem: Reversing Strings Create a program that: Reads an input string Reverses it using a Stack Learning Java Input Stacks and Queues avaJ gninraeL Output seueuQ dna skcatS Check your solution here: https://judge.softuni.bg/Contests/

Solution: Reversing Strings Scanner scanner = new Scanner(System.in); String inputString = scanner.nextLine(); ArrayDeque<Character> reversed = new ArrayDeque<>(); for (Character ch : inputString.toCharArray()) { reversed.push(ch); } while (!reversed.isEmpty()) { System.out.print(reversed.pop()); Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Stack – Utility Methods ArrayDeque<Integer> stack = new ArrayDeque<>(); Integer size = stack.size(); boolean isEmpty = stack.isEmpty(); boolean exists = stack.contains(2); Integer[] arr = stack.toArray(); Retains order of elements

Stack – Overview of all operations 10 5 2 15 5 -7 132 Stack<Integer> push() 5 4 1 2 3 pop() size(): 5 peek()

Problem: Simple Calculator Implement a simple calculator that can evaluate simple expressions (only addition and subtraction) 2 + 5 + 10 - 2 - 1 Input 2 - 2 + 5 14 Output 5 Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Solution: Simple Calculator Scanner scanner = new Scanner(System.in); String[] tokens = scanner.nextLine().split("\\s+"); Deque<String> stack = new ArrayDeque<>(); Collections.addAll(stack, tokens); // continues… Split by regex Adds a collection to another collection Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Solution: Simple Calculator while (stack.size() > 1) { int first = Integer.valueOf(stack.pop()); String op = stack.pop(); int second = Integer.valueOf(stack.pop()); switch (op) case "+": stack.push(String.valueOf(first + second)); break; case "-": stack.push(String.valueOf(first - second)); break; } System.out.println(stack.pop()); Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Problem: Decimal To Binary Converter Create a converter which takes a decimal number and converts it into a binary number. 10 Input 1024 1010 Output 10000000000 Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Solution: Decimal To Binary Converter Scanner scanner = new Scanner(System.in); int decimal = Integer.valueOf(scanner.nextLine()); ArrayDeque<Integer> stack = new ArrayDeque<>(); // TODO: check if number is 0 while (decimal != 0) stack.push(decimal % 2); decimal /= 2; while (!stack.isEmpty()) System.out.print(stack.pop()); Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Problem: Matching Brackets We are given an arithmetical expression with brackets (with nesting) Goal: extract all sub-expressions in brackets 1 + (2 - (2 + 3) * 4 / (3 + 1)) * 5 (2 + 3) (3 + 1) (2 - (2 + 3) * 4 / (3 + 1)) Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Problem: Matching Brackets Scanner scanner = new Scanner(System.in); String expression = scanner.nextLine(); Deque<Integer> stack = new ArrayDeque<>(); // continue… Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Problem: Matching Brackets for (int i = 0; i < expression.length(); i++) { char ch = expression.charAt(i); if (ch == '(') stack.push(i); else if (ch == ')') int startIndex = stack.pop(); String contents = expression.substring(startIndex, i + 1); System.out.println(contents); } Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Live Exercises in Class (Lab) Working with Stacks Live Exercises in Class (Lab)

Queue First In First Out 2 10 5

Queue – Abstract Data Type Queues provide the following functionality: Adding an element at the end of the queue Removing the first element from the queue Getting the first element of the queue without removing it 2 10 5 2 10 5 2 10 5

ArrayDeque<E> – Java Queue Implementation Creating a Queue Adding elements at the end of the queue add() – throws exception if queue is full offer() – returns false if queue is full ArrayDeque<Integer> queue = new ArrayDeque<>(); queue.add(element); queue.offer(element);

ArrayDeque<E> – Java Queue Implementation (2) Removing elements remove() – throws exception if queue is empty poll() – returns null if queue is empty Check first element element = queue.remove(); element = queue.poll(); element = queue.peek();

add() / offer() Adds an element to the queue 4 2 1 3 size(): Queue<Integer> 5 15 121 -3

remove() / poll() Returns and removes first element 4 2 3 size(): Queue<Integer> 121 15 -3 5

Problem: Hot Potato Children form a circle and pass a hot potato clockwise Every nth toss a child is removed until only one remains Upon removal the potato is passed forward Print the child that remains last Mimi Pepi Toshko 2 Input Removed Pepi Removed Mimi Last is Toshko Output Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Solution: Hot Potato Scanner scanner = new Scanner(System.in); String[] children = scanner.nextLine().split("\\s+"); int n = Integer.valueOf(scanner.nextLine()); ArrayDeque<String> queue = new ArrayDeque<>(); for (String child : children) queue.offer(child); // continue… Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Solution: Hot Potato (2) while (queue.size() > 1) { for (int i = 1; i < n; i++) queue.offer(queue.poll()); System.out.println("Removed " + queue.poll()); } System.out.println("Last is " + queue.poll()); Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

ArrayDeque<E> – Java Queue Implementation (2) Utility Methods peek() – checks the value of the first element size() – returns queue size toArray() – converts the queue to an array contains() – checks if element is in the queue Integer element = queue.peeк(); Integer size = queue.size(); Integer[] arr = queue.toArray(); boolean exists = queue.contains(element);

peek() Gets the first element without removing it 2 size(): Queue<Integer> 121 15 15

Problem: Math Potato Rework the previous problem so that a child is removed only on a prime cycle (cycles start from 1) If a cycle is not prime, just print the child's name Mimi Pepi Toshko 2 Input Removed Pepi Prime Mimi Prime Toshko Removed Mimi Last is Toshko Output Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Solution: Math Potato int cycle = 1; while (queue.size() > 1) { for (int i = 1; i < n; i++) queue.offer(queue.poll()); if (isPrime(cycle)) System.out.println("Prime " + queue.peek()); else System.out.println("Removed " + queue.poll()); cycle++; } System.out.println("Last is " + queue.poll()); Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Queue – Overview of All Operations 2 4 1 3 size(): Queue<Integer> -3 121 15 15 5 5 add() peek() remove()

Problem: Palindrome Checker Palindrome is a string that reads the same forward and backward Create a simple program that checks if a given string is a palindrome using an ArrayDeque radar Input Not a palindrome true Output false Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Solution: Palindrome Checker Scanner scanner = new Scanner(System.in); String palindromeCandidate = scanner.nextLine(); Deque<Character> queue = new ArrayDeque<>(); for (char c : palindromeCandidate.toCharArray()) queue.offer(c); // continue… Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Solution: Palindrome Checker boolean isPalindrome = true; while (queue.size() > 1) { char first = queue.poll(); char last = queue.pollLast(); if (first != last) { isPalindrome = false; break; } System.out.println(isPalindrome); Check your solution here: https://judge.softuni.bg/Contests/Practice/Index/386#0

Priority Queue Retains a specific order to the elements Higher priority elements are pushed to the beginning of the queue Lower priority elements are pushed to the end of the queue A C B

Live Exercises in Class (Lab) Working with Queues Live Exercises in Class (Lab)

Summary Stack<E> – LIFO data structure * Summary Stack<E> – LIFO data structure The last element that is put in the stack is the first to come out Queue<E> – FIFO data structure The first element that is put in the queue is the first to come out (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*

Stacks, Queues https://softuni.bg/courses/programming-fundamentals © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

License This course (slides, examples, demos, videos, homework, etc.) is licensed under the "Creative Commons Attribution- NonCommercial-ShareAlike 4.0 International" license Attribution: this work may contain portions from "Fundamentals of Computer Programming with Java" book by Svetlin Nakov & Co. under CC-BY-SA license "C# Part I" course by Telerik Academy under CC-BY-NC-SA license "C# Part II" course by Telerik Academy under CC-BY-NC-SA license © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Free Trainings @ Software University Software University Foundation – softuni.org Software University – High-Quality Education, Profession and Job for Software Developers softuni.bg Software University @ Facebook facebook.com/SoftwareUniversity Software University @ YouTube youtube.com/SoftwareUniversity Software University Forums – forum.softuni.bg © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.