From charlesreid1

m (Replacing charlesreid1.com:3000 with git.charlesreid1.com)
 
(8 intermediate revisions by the same user not shown)
Line 3: Line 3:
Stacks and Queues in Java are implemented as part of the Collections library. Also implemented are Deques and priority queues.
Stacks and Queues in Java are implemented as part of the Collections library. Also implemented are Deques and priority queues.


==Goodrich Chapter 6==
==Goodrich Java Chapter 6==
 
Chapter 6 of Goodrich covers stacks and queues. These data structures can be implemented using array-based or link-based data structures. Thus, when covering data structures it's useful to start by covering array-based data structures that are dynamic, and their big-O cost of operations.
 
===Stacks===
 
Stacks are LIFO - last in first out - data structures
 
Stacks lend themselves naturally to a linked list implementation, but can be implemented as an O(1) operation for both singly linked lists and array based lists.
* pushing onto the stack - O(1) operation
* popping from the stack - O(1) operation
 
===Queues===
 
Queues are FIFO - first in first out - data structures
 
Queue - singly-linked list implementation - single head pointer - allows us to:
* insert/remove at the head with O(1)
* insert/remove at the tail with O(n)
 
Removing is O(n) because in a singly-linked list, we need the thing that links to tail.
 
Implementing a doubly linked list makes access to second-to-last element faster, at a higher overhead cost.
 
Doubly-linked queue allows for
* insertion with O(1) speed
* removal with O(1) speed


=Implementations=
=Implementations=
Line 16: Line 42:
* inputs X, outputs Y, with timing/profiling.
* inputs X, outputs Y, with timing/profiling.


==ArrayStack==
==Stack interfaces==
 
Interfaces in Java provide programmers with "inheritance lite" - in the form of a set of virtual methods that a class is required to implement.
 
These allow a uniform interface to be imposed for data collections objects.
 
Here is a Java interface for a Stack class that adheres to the Stack interface described at the [[Abstract Data Types]] page:
 
[[StacksQueues/Java/Stack Interface]]
 
==Stack classes==
 
===Array-based Stack Implementation===


implementation of a stack using a fixed or variable size array.
implementation of a stack using a fixed or variable size array.
Wiki notes: [[StacksQueues/Java/ArrayStack]] and Wiki notes: [[StacksQueues/Java/ArrayStackFS]]
Array-based stack implementation: https://git.charlesreid1.com/cs/java/src/master/stacks-queues-deques/stacks/ArrayStack.java
===Array-based Queue Implementation===
The first array-based queue implementation is a data structure that uses a dynamically allocated array size to store data. ArrayQueue class: https://git.charlesreid1.com/cs/java/src/master/stacks-queues-deques/queues/ArrayQueue.java
The second aray-based queue implementation is a data structure that uses a fixed array size, and throws a Full exception when full. ArrayQueueFS class: https://git.charlesreid1.com/cs/java/src/master/stacks-queues-deques/queues/ArrayQueueFS.java
<pre>
import java.util.*;
import java.io.*;
class Empty extends ArrayIndexOutOfBoundsException{};
class Full extends ArrayIndexOutOfBoundsException{};
</pre>
===Linked List-based Queue Implementation===
The linked queue class uses a circular linked list to conserve memory for linked lists with high throughput.
See LinkedQueue class: https://git.charlesreid1.com/cs/java/src/master/stacks-queues-deques/queues/LinkedQueue.java


=Flags=
=Flags=

Latest revision as of 03:53, 9 October 2019

Notes

Stacks and Queues in Java are implemented as part of the Collections library. Also implemented are Deques and priority queues.

Goodrich Java Chapter 6

Chapter 6 of Goodrich covers stacks and queues. These data structures can be implemented using array-based or link-based data structures. Thus, when covering data structures it's useful to start by covering array-based data structures that are dynamic, and their big-O cost of operations.

Stacks

Stacks are LIFO - last in first out - data structures

Stacks lend themselves naturally to a linked list implementation, but can be implemented as an O(1) operation for both singly linked lists and array based lists.

  • pushing onto the stack - O(1) operation
  • popping from the stack - O(1) operation

Queues

Queues are FIFO - first in first out - data structures

Queue - singly-linked list implementation - single head pointer - allows us to:

  • insert/remove at the head with O(1)
  • insert/remove at the tail with O(n)

Removing is O(n) because in a singly-linked list, we need the thing that links to tail.

Implementing a doubly linked list makes access to second-to-last element faster, at a higher overhead cost.

Doubly-linked queue allows for

  • insertion with O(1) speed
  • removal with O(1) speed

Implementations

Stacks and queues can be implemented using various implementations:

  • fixed/variable size
  • contiguous/linked memory structure (array list vs linked list)
  • singly/circular/doubly linked lists
  • size of lists, size of objects and pointers

measurement/profiling of Java code for memory and performance, timing, etc.

  • inputs X, outputs Y, with timing/profiling.

Stack interfaces

Interfaces in Java provide programmers with "inheritance lite" - in the form of a set of virtual methods that a class is required to implement.

These allow a uniform interface to be imposed for data collections objects.

Here is a Java interface for a Stack class that adheres to the Stack interface described at the Abstract Data Types page:

StacksQueues/Java/Stack Interface

Stack classes

Array-based Stack Implementation

implementation of a stack using a fixed or variable size array.

Wiki notes: StacksQueues/Java/ArrayStack and Wiki notes: StacksQueues/Java/ArrayStackFS

Array-based stack implementation: https://git.charlesreid1.com/cs/java/src/master/stacks-queues-deques/stacks/ArrayStack.java

Array-based Queue Implementation

The first array-based queue implementation is a data structure that uses a dynamically allocated array size to store data. ArrayQueue class: https://git.charlesreid1.com/cs/java/src/master/stacks-queues-deques/queues/ArrayQueue.java

The second aray-based queue implementation is a data structure that uses a fixed array size, and throws a Full exception when full. ArrayQueueFS class: https://git.charlesreid1.com/cs/java/src/master/stacks-queues-deques/queues/ArrayQueueFS.java

import java.util.*;
import java.io.*;

class Empty extends ArrayIndexOutOfBoundsException{};
class Full extends ArrayIndexOutOfBoundsException{};

Linked List-based Queue Implementation

The linked queue class uses a circular linked list to conserve memory for linked lists with high throughput.

See LinkedQueue class: https://git.charlesreid1.com/cs/java/src/master/stacks-queues-deques/queues/LinkedQueue.java

Flags