Problem of the Day At what times do the minute and hour hands on an analog clock line up?

Post on 01-Apr-2015

213 views 0 download

Tags:

Transcript of Problem of the Day At what times do the minute and hour hands on an analog clock line up?

Problem of the Day

At what times do the minute and hour hands on an analog clock line up?

Problem of the Day

At what times do the minute and hour hands on an analog clock line up?

Hands overlap one another Hands opposite one another

12:00:00.000

01:05:27.273

02:10:54.545

03:16:21.818

04:21:49.091

05:27:16.364

06:32:43.636

07:38:10.909

08:43:38.182

09:49:05.455

10:54:32.727

06:00:00.000

07:05:27.273

08:10:54.545

09:16:21.818

10:21:49.091

11:27:16.364

12:32:43.636

01:38:10.909

02:43:38.182

03:49:05.455

04:54:32.727

LECTURE 21:STACK ADT

CSC 212 – Data Structures

Rest of the Year

Abstract – List what is done, not how

it is done

Data – Access & use Collections of

data

Type – Will use in fields, parameters,

& locals

Rest of the Year

Abstract – List what is done, not how

it is done

Data – Access & use Collections of

data

Type – Will use in fields, parameters,

& locals

ADTs Mean Interfaces

Each ADT is defined by single Interface Guarantees methods exist & what they should

do But classes are free to implement however

they want Programmer knows from the interface:

Each of the method signatures Value returned by the method The effects of the method’s actions Why Exceptions thrown by method

View of an ADT

IOU

View of an ADT

You

Other Coder

IOU

View of an ADT

You

Other Coder

IOU

ADT

ADTs must remain abstract Any implementation okay, if it completes

methods Could implement an ADT with:

Implementing ADT

ADTs must remain abstract Any implementation okay, if it completes

methods Could implement an ADT with:

Array

Implementing ADT

ADTs must remain abstract Any implementation okay, if it completes

methods Could implement an ADT with:

Array Linked list

Implementing ADT

ADTs must remain abstract Any implementation okay, if it completes

methods Could implement an ADT with:

Array Linked list Trained monkeys

Implementing ADT

ADTs must remain abstract Any implementation okay, if it completes

methods Could implement an ADT with:

Array Linked list Trained monkeys College students

Implementing ADT

Is linked list an ADT?

NO!

Linked lists have very specific implementation Singly-, & doubly-linked versions exist… … but implementation impossible using an

array No trained monkeys could do same work

Linked lists also do not specify functionality No standard way to access or use data In fact, there is no interface serving as

guarantee!

Why is linked list not ADT?

Implementation vs. ADT

Implementation ADT

Superinterface for all our ADTs Define methods common to all data

structures Access & usages patterns differ with each

ADT

Collection Classes

Superinterface for all our ADTs Define methods common to all data

structures Access & usages patterns differ with each

ADT

public interface Collection {public int size();public boolean isEmpty();

}

Collection Classes

Superinterface for all our ADTs Define methods common to all data

structures Access & usages patterns differ with each

ADT

public interface Collection {public int size();public boolean isEmpty();

}

Collection Classes

Superinterface for all our ADTs Define methods common to all data

structures Access & usages patterns differ with each

ADT

public interface Collection {public int size();public boolean isEmpty();

}

Collection Classes

Awwww… our first collection class Works like PEZ dispenser:

Add by pushing data onto top Pop top item off to remove

Accessing other values impossible Top item only is available Cheap plastic/private fields get in way

Stacks

Applications of Stacks

Stacks are used everywhere Back & Forward buttons in web browser Powerpoint’s Undo & Redo commands Methods’ stackframes used during

execution Java uses stacks to execute operations in

program

Defines two vital methods… push(obj) add obj onto top of stack pop() remove & return item on top of

stack … an accessor method…

top() return top item (but do not remove it)

… and Collection’s methods… size() returns number of items in stack isEmpty() states if stack contains items

Stack ADT

ADT also defines own exceptionpublic class EmptyStackException extends RuntimeException {public EmptyStackException(String err) { super(err);}

} EmptyStackException is unchecked

Need not be listed in throws, but could be Unchecked since there is little you can do

to fix it try-catch not required, but can crash

program

More Stack ADT

public interface Stack<E> extends Collection {public E top() throws EmptyStackException;public E pop() throws EmptyStackException;public void push(E element);

}

Any type of data stored within a Stack Generics enable us to avoid rewriting this code

Minimum set of exceptions defined by interface Classes could throw more unchecked

exceptions

Stack Interface

Last-In, First-Out principle used to access data Also called LIFO ordering

Top of stack is where data added & removed

Using Stack

Last-In, First-Out principle used to access data Also called LIFO ordering

Top of stack is where data added & removed Pulling out tablecloth trick does not work

Using Stack

Your Turn

Get into your groups and complete activity

For Next Lecture

Read GT5.1.2 – 5.1.3 for Friday’s class How can we use an array to implement a

Stack? Linked-list based approaches possible, too? Why would we prefer one over the other?

Week #8 weekly assignment due on Tuesday

Programming assignment #1 also on Angel Pulls everything together and shows off

your stuff Better get moving on it, since due in 10

days!