6 Stack ADTs  Stack concepts  Stack applications  Stack ADTs: requirements, contracts  Implementations of stacks: using arrays and linked-lists  Stacks.

Slides:



Advertisements
Similar presentations
CS Data Structures I Chapter 6 Stacks I 2 Topics ADT Stack Stack Operations Using ADT Stack Line editor Bracket checking Special-Palindromes Implementation.
Advertisements

Stacks.
Stacks Chapter 11.
6-1 6 Stack ADTs Stack concepts. Stack applications. A stack ADT: requirements, contract. Implementations of stacks: using arrays, linked lists. Stacks.
The ADT Stack Definition
Queue ADTs Queue concepts. Queue applications. A queue ADT: requirements, contract. Implementations of queues: using arrays, linked lists.
7 Queue ADTs  Queue concepts  Queue applications  A queue ADT: requirements, contract  Implementations of queues: using arrays and linked-lists  Queues.
9-1 9 Queue ADTs Queue concepts. Queue applications. A queue ADT: requirements, contract. Implementations of queues: using arrays, linked lists. Queues.
7-1 7 Queue ADTs Queue concepts. Queue applications. A queue ADT: requirements, contract. Implementations of queues: using arrays, linked lists. Queues.
© 2004 Goodrich, Tamassia Stacks. © 2004 Goodrich, Tamassia Stacks2 The Stack ADT (§4.2) The Stack ADT stores arbitrary objects Insertions and deletions.
8 List and Iterator ADTs  List concepts  List applications  A list ADT: requirements, contract  Iterators  Implementations of lists: using arrays.
Stacks CS-240 Dick Steflik. Stacks Last In, First Out operation - LIFO As items are added they are chronologically ordered, items are removed in reverse.
Introduction to Stacks What is a Stack Stack implementation using arrays. Application of Stack.
Stacks CS-240 Dick Steflik. Stacks Last In, First Out operation - LIFO As items are added they are chronologically ordered, items are removed in reverse.
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.
1 CSCD 326 Data Structures I Stacks. 2 Data Type Stack Most basic property: last item in (most recently inserted) is first item out LIFO - last in first.
Fall 2007CS 2251 Stacks Chapter 5. Fall 2007CS 2252 Chapter Objectives To learn about the stack data type and how to use its four methods: push, pop,
Introduction to Stacks What is a Stack Stack implementation using array. Stack implementation using linked list. Applications of Stack.
Stacks Chapter Chapter Contents Specifications of the ADT Stack Using a Stack to Process Algebraic Expressions Checking for Balanced Parentheses,
1 Lecture 24 Abstract Data Types (ADT) –I Overview  What is an Abstract Data type?  What is Stack ADT?  Stack ADT Specifications  Array Implementation.
Stacks. 2 Outline and Reading The Stack ADT (§2.1.1) Array-based implementation (§2.1.1) Growable array-based stack (§1.5) Java.util.Stack class Java.util.Vector.
Part-B1 Stacks. Stacks2 Abstract Data Types (ADTs) An abstract data type (ADT) is an abstraction of a data structure An ADT specifies: Data stored Operations.
Fall 2007CS 2251 Stacks Chapter 5. Fall 2007CS 2252 Chapter Objectives To learn about the stack data type and how to use its four methods: push, pop,
Part-B1 Stacks. Stacks2 Abstract Data Types (ADTs) An abstract data type (ADT) is an abstraction of a data structure An ADT specifies: Data stored Operations.
CHAPTER 6 Stacks Array Implementation. 2 Stacks A stack is a linear collection whose elements are added and removed from one end The last element to be.
1 Introduction to Stacks What is a Stack? Stack implementation using array. Stack implementation using linked list. Applications of Stacks.
CHAPTER 6 Stacks. 2 A stack is a linear collection whose elements are added and removed from one end The last element to be put on the stack is the first.
Topic 3 The Stack ADT.
Implementing Stacks Ellen Walker CPSC 201 Data Structures Hiram College.
1 Stacks – Chapter 3 A stack is a data structure in which all insertions and deletions of entries are made at one end, called the top of the stack. Alternatively,
Data Structures and Algorithms
Chapter 7 Stacks I CS Data Structures I COSC 2006 April 22, 2017
CM0551 Exam Prep. What are an algorithm’s time and space complexity? (2 marks) Answer: The growth rate of the algorithm’s time requirement and the computer.
SAK 3117 Data Structures Chapter 3: STACKS. Objective To introduce: Stack concepts Stack operations Stack applications CONTENT 3.1 Introduction 3.2 Stack.
Stack. Abstract Data Types (ADTs) An abstract data type (ADT) is an abstraction of a data structure An ADT specifies: Data stored Operations on the data.
COP3530 Data Structures600 Stack Stack is one the most useful ADTs. Like list, it is a collection of data items. Supports “LIFO” (Last In First Out) discipline.
© 2004 Goodrich, Tamassia Stacks. © 2004 Goodrich, Tamassia Stacks2 Abstract Data Types (ADTs) An abstract data type (ADT) is an abstraction of a data.
Stacks  Introduction  Applications  Implementations  Complex Applications.
7.2 Priority Queue ADTs Priority queue concepts
Stacks. A stack is a data structure that holds a sequence of elements and stores and retrieves items in a last-in first- out manner (LIFO). This means.
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.
Lecture6: Stacks Bohyung Han CSE, POSTECH CSED233: Data Structures (2014F)
11 Map ADTs  Map concepts  Map applications  A map ADT: requirements, contract.  Implementations of maps: using key-indexed arrays, entry arrays, linked-lists,
1 Stacks & Queues CSC Stacks & Queues Stack: Last In First Out (LIFO). –Used in procedure calls, to compute arithmetic expressions etc. Queue: First.
9-1 9 Set ADTs Set concepts. Set applications. A set ADT: requirements, contract. Implementations of sets: using arrays, linked lists, boolean arrays.
9 Set ADTs  Set concepts  Set applications  A set ADT: requirements, contract  Implementations of sets: using member arrays, linked lists, boolean.
ITI Introduction to Computing II Lab-5 Dewan Tanvir Ahmed University of Ottawa.
“The desire for safety stands against every great and noble enterprise.” – Tacitus Thought for the Day.
Stack. ADS2 Lecture 1010 The Stack ADT (GoTa §5.1) The Stack ADT stores arbitrary objects Insertions and deletions follow the last-in.
Click to edit Master text styles Stacks Data Structure.
1 Data Structures and Algorithms Stack. 2 The Stack ADT Introduction to the Stack data structure Designing a Stack class using dynamic arrays Linked Stacks.
1 Stacks Abstract Data Types (ADTs) Stacks Application to the analysis of a time series Java implementation of a stack Interfaces and exceptions.
1 Data Structures and Algorithms Stack. 2 The Stack ADT Introduction to the Stack data structure Designing a Stack class using dynamic arrays Linked Stacks.
© 2004 Goodrich, Tamassia Stacks. © 2004 Goodrich, Tamassia Stack: Last In First Out (LIFO).–Used in procedure calls, to compute arithmetic expressions.
Linked Lists, Queues, Stacks
Sections 3.4 Formal Specification
Stack: a Linked Implementation
Comprehensive Introduction to OOP with Java, C. Thomas Wu Stack ADT
Recap: Solution of Last Lecture Activity
Stacks.
The Stack ADT. 3-2 Objectives Define a stack collection Use a stack to solve a problem Examine an array implementation of a stack.
Stacks.
Stacks Chapter 5 Adapted from Pearson Education, Inc.
Lecture 5 Stacks King Fahd University of Petroleum & Minerals
Stacks.
Introduction to Stacks
Introduction to Stacks
8 List ADTs List concepts. List applications.
CHAPTER 3: Collections—Stacks
Presentation transcript:

6 Stack ADTs  Stack concepts  Stack applications  Stack ADTs: requirements, contracts  Implementations of stacks: using arrays and linked-lists  Stacks in the Java class library © 2008 David A Watt, University of Glasgow Algorithms & Data Structures (M)

6-2 Stack concepts  A stack is a last-in-first-out sequence of elements. Elements can added and removed only at one end (the top of the stack).  We can push an element on to the stack, i.e., add it at the top of the stack.  We can pop an element from the stack, i.e., remove it from the top of the stack.  The size (or depth) of a stack is the number of elements it contains.

6-3 Example: stack of books  Consider a stack of books on a table: Initially: Moby Dick War & Peace Rob Roy (size = 3) After popping a book: (size = 2) Moby Dick War & Peace After pushing “Mme Bovary”: (size = 3) Moby Dick War & Peace Mme Bovary After pushing “Odyssey”: (size = 4) Moby Dick War & Peace Mme Bovary Odyssey  It is a stack because we can add (push) and remove (pop) books only at the top.

6-4 Stack applications  Interpreter (e.g., Java Virtual Machine): – uses a stack to contain intermediate results during evaluation of complicated expressions – also uses the stack to contain arguments and return addresses for method calls and returns.  Parser (e.g., XML parser, parser in Java compiler): – uses a stack to contain symbols encountered during parsing of the source code.

6-5 Example: text-file reversal  A text file is a sequence of (zero or more) lines.  To reverse the order of these lines, we must store them in a first-in-last-out sequence.  Text-file reversal algorithm: To make file output contain the lines of file input in reverse order: 1.Make line-stack empty. 2.For each line read from input, repeat: 2.1.Push line on line-stack. 3.While line-stack is not empty, repeat: 3.1.Pop a line from line-stack into line. 3.2.Write line to output. 4.Terminate.

6-6 Example: bracketing (1)  A phrase is well-bracketed if: –for every left bracket, there is a later matching right bracket –for every right bracket, there is an earlier matching left bracket –the sub-phrase between a pair of matching brackets is itself well-bracketed.  Examples and counter-examples (math notation): s  (s – a)  (s – b)  (s – c) (– b +  [b 2 – 4ac]) / 2a s  (s – a)  (s – b  (s – c) (– b +  [b 2 – 4ac)] / 2a well-bracketed not well-bracketed

6-7 Example: bracketing (2)  Bracket matching algorithm: To test whether phrase is well-bracketed: 1.Make bracket-stack empty. 2.For each symbol sym in phrase (scanning from left to right), repeat: 2.1.If sym is a left bracket: Push sym on bracket-stack. 2.2.Else, if sym is a right bracket: If bracket-stack is empty, terminate with false Pop a bracket from bracket-stack into left If left and sym are not matched brackets, terminate with false. 3.Terminate with true if bracket-stack is empty, or with false otherwise.

6-8 Stack ADT: requirements  Requirements: 1)It must be possible to make a stack empty. 2)It must be possible to push an element on to a stack (i.e., add it at the top of the stack). 3)It must be possible to pop the topmost element from a stack (i.e., remove it from the stack). 4)It must be possible to test whether a stack is empty. 5)It should be possible to access the topmost element in a stack without popping it.

6-9 Stack ADT: contract (1)  Possible contract for homogeneous stacks (expressed as a Java generic interface): public interface Stack { // Each Stack object is a homogeneous stack // whose elements are of type E. /////////////// Accessors /////////////// public boolean empty (); // Return true if and only if this stack is empty. public E peek (); // Return the element at the top of this stack.

6-10 Stack ADT: contract (2)  Possible contract (continued): ////////////// Transformers /////////////// public void clear (); // Make this stack empty. public void push (E it); // Add it as the top element of this stack. public E pop (); // Remove and return the element at the top of this // stack. }

6-11 Implementation of stacks using arrays (1)  Represent a bounded stack (size  cap) by: –a variable size –an array elems of length cap, containing the elements in elems[0… size–1]. Illustration (cap = 6): Moby Dick War & Peace Rob Roy size=3 4 5 Invariant: element 01 size–1cap–1 topmost elementunoccupied Empty stack: size=0 cap–1

6-12 Implementation of stacks using arrays (2)  Java implementation: public class ArrayStack implements Stack { private E[] elems; private int size; /////////////// Constructor /////////////// public ArrayStack (int cap) { elems = (E[]) new Object[cap]; size = 0; }

6-13 Implementation of stacks using arrays (3)  Java implementation (continued): /////////////// Accessors /////////////// public boolean empty () { return (size == 0); } public E peek () { if (size == 0) throw … ; return elems[size-1]; }

6-14 Implementation of stacks using arrays (4)  Java implementation (continued): ////////////// Transformers /////////////// public void clear () { size = 0; } public void push (E it) { if (size == elems.length) … elems[size++] = it; } The array is full. Expand the array, or throw an exception.

6-15 Implementation of stacks using arrays (5)  Java implementation (continued): public E pop () { if (size == 0) throw … ; E topElem = elems[--size]; elems[size] = null; return topElem; } }  Analysis: –All operations have time complexity O(1).

6-16 Implementation of stacks using SLLs (1)  Represent an (unbounded) stack by an SLL, such that the first node contains the topmost element. Empty stack: Illustration: Rob Roy War & Peace Moby Dick Invariant: element topmost element

6-17 Implementation of stacks using SLLs (2)  Java implementation (continued): public class LinkedStack implements Stack { private Node top; /////////////// Inner class /////////////// private static class Node { public E element; public Node succ; public Node (E x, Node s) { element = x; succ = s; } }

6-18 Implementation of stacks using SLLs (3)  Java implementation (continued): /////////////// Constructor /////////////// public LinkedStack () { top = null; } /////////////// Accessors /////////////// public boolean empty () { return (top == null); } public E peek () { if (top == null) throw … ; return top.element; }

6-19 Implementation of stacks using SLLs (4)  Java implementation (continued): ////////////// Transformers /////////////// public void clear () { top = null; } public void push (E it) { top = new Node(it, top); }

6-20 Implementation of stacks using SLLs (5)  Java implementation (continued): public E pop () { if (top == null) throw … ; E topElem = top.element; top = top.succ; return topElem; } }  Analysis: –All operations have time complexity O(1).

6-21 Stacks in the Java class library  The library class java.util.Stack is similar to the above class ArrayStack.  Illustration: import java.util.*; Stack books = new Stack (); books.push(moby_dick); books.push(war_and_peace); books.push(rob_roy); Book b = books.pop();

6-22 Example: text-file reversal again (1)  Implementation of the text-file reversal algorithm: public static void reverse ( BufferedReader input, BufferedWriter output) throws IOException { // Make output contain the lines of input in reverse // order. Stack lineStack = new Stack (); for (;;) { String line = input.readLine(); if (line == null) break; // end of input lineStack.push(line); } input.close();

6-23 Example: text-file reversal again (2)  Implementation (continued): while (! lineStack.empty()) { String line = lineStack.pop(); output.write(line + "\n"); } output.close(); }