# So what's next? Introduction to data structures Two Perspectives: Abstract description (capabilities) Implementation(s) For structures: Stack Queue Deque.

## Presentation on theme: "So what's next? Introduction to data structures Two Perspectives: Abstract description (capabilities) Implementation(s) For structures: Stack Queue Deque."— Presentation transcript:

So what's next? Introduction to data structures Two Perspectives: Abstract description (capabilities) Implementation(s) For structures: Stack Queue Deque (maybe)

Clicker quiz 12/3/13 CSE 1102 Fall 2013

The country with the red star on it is: A. Canada B. Sweden C. Latvia D. Finland E. None of the above

A. "Finland" B. "is" C. "my" D. "home" E. None of the above Suppose I have a stack s that can store Strings, and I execute the following statements starting with an empty stack : 1. s.push("Finland"); 2. s.push("is"); 3. s.push("my"); 4. String w = s.peek(); 5. String x = s.pop(); 6. s.push("home"); 7. String y = s.pop(); 8. String z = s.pop(); What is the value of z?

A. "Sweden" B. "is" C. "my" D. "neighbor" E. None of the above Suppose I have a queue q that can store Strings, and I execute the following statements starting with an empty queue : 1. q.enqueue("Sweden"); 2. q.enqueue("is"); 3. q.enqueue("my"); 4. String w = q.dequeue(); 5. String x = q.peek(); 6. q.enqueue("neighbor"); 7. String y = q.dequeue(); 8. String z = q.dequeue(); What is the value of z?

Clicker questions and stuff 12/3/13 CSE 1102 Fall 2013

Abstract Data Types (1970s) Description of a data structure that includes only its operations, not its implementation In Java, ADTs are best modeled by interfaces

Example ADT: Stack Operations: push(element) – adds element to "top" of the stack pop – returns the top element of the stack, which is removed from the stack peek – returns the top element of the stack without changing the stack isEmpty – returns true if stack is empty, false otherwise

Stack intuitions examples in the world uses in computing

A. "Iceland" B. "cool" C. true D. false E. None of the above Suppose I have a stack S that can store Strings, and I execute the following statements starting with an empty stack : 1. S.push("Iceland"); 2. S.push("is"); 3. String w = S.peek(); 4. String x = S.pop(); 5. S.push("cool"); 6. String y = S.pop(); 7. boolean z = S.isEmpty(); What is the value of z?

Example ADT: Queue Operations: enqueue(element) – adds element to "back" of the queue dequeue – returns the "front" element of the queue, which is removed from the queue front – returns the front element of the queue without changing the queue isEmpty – returns true if queue is empty, false otherwise

Queue intuitions examples in the world uses in computing

A. "Sweden" B. "is" C. "my" D. "neighbor" E. None of the above Suppose I have a queue q that can store Strings, and I execute the following statements starting with an empty queue : 1. q.enqueue("Sweden"); 2. q.enqueue("is"); 3. q.enqueue("my"); 4. String w = q.dequeue(); 5. String x = q.peek(); 6. q.enqueue("neighbor"); 7. String y = q.dequeue(); 8. String z = q.dequeue(); What is the value of z?

Suppose we have a class that acts as a Holder for Colors: public class ColorHolder { private Color _myColor; public ColorHolder(Color color) { _myColor = color; } public Color getValue(){ return _myColor; } public void setColor (Color col) { _myColor = col; } It might be useful to have a more general version, that could hold anything. Quick Topic 1: Generics

Java allows us to define a class generically, with type declared at instantiation time: public class Holder { private ValType _myValue; public Holder(ValType value) { _myValue = value; } public ValType getValue(){ return _myValue; } public void setValue (ValType value) { _myValue = value; } To use this class, you need to declare and instantiate object with actual type: Holder currentColor; currentColor = new Holder (Color.red); More examples in Chapter 14!

Example: Node class holds an element of some type, plus another Node of the same sort. public class Node { private ValType _myValue; private Node _next public Node(ValType value) { _myValue = value; _next = null; } public ValType getValue(){ return _myValue; } public void setValue (ValType value) { _myValue = value; } public Node getNext(){ return _next; } Since _next is a Node of the same sort, we can chain instances of these together.

Suppose we want to diagram a set of instances and their relationships Answer: object (or instance) diagram Quick Topic 2: Object Diagrams For example, a sequence of two Nodes whose elements are Cars

"syntax"

Topic 3: Are you on this list? Bidhan Adhikari Devin Delaney Erming Gao Christopher Lawrence Jeffrey Metter Jonathan Rarey

ADT: defined by capabilities In Java: a natural fit to Interfaces, e.g. public interface StackADT { void push(ElementType t); ElementType pop(); ElementType peek(); boolean isEmpty(); }

So let's use Nodes to implement a Stack One instance variable, _top, which refers to a Node Stack fred = new Stack (); // create empty Stack // now add some stuff fred.push(new Car(Color.RED)); fred.push(new Car(Color.BLUE));

So let's use Nodes to implement a Stack ctd. One instance variable, _top, which refers to a Node // now pop something Car ethyl = fred.pop(); // what actually happens is this

So let's use Nodes to implement a Stack public class Stack implements StackADT { private Node _top; public Stack() { _top = null; } public void push(EiType value) { Node nodeToPush = new Node (value); nodeToPush.setNext(_top); _top = nodeToPush; } public EiType pop() { EiType retVal = _top.getValue(); _top = _top.getNext(); return retVal; } public boolean isEmpty(){ return _top == null; }

Download ppt "So what's next? Introduction to data structures Two Perspectives: Abstract description (capabilities) Implementation(s) For structures: Stack Queue Deque."

Similar presentations