ELEMENTARY DATA STRUCTURES

Download Report

Transcript ELEMENTARY DATA STRUCTURES

ELEMENTARY DATA
STRUCTURES
Stacks, Queues, and
Linked Lists
Elementary Data
Structures
Used as programming tools
(stacks & queues)
- software (i.e. compilers)
- used in the operations of a certain task
Implemented in CPU instructions
- hardware
Stacks
Definition
 container of objects
 uses LIFO principle for object operations
 operations are push and pop
Sample uses :
 Internet browsers
 Undo / Redo feature
Other Applications
Parsing
- check for matching parenthesis or
brackets
- aid for algorithms applied to complex
data structures (traverse nodes of a tree
and searching vertices of a graph)
Basic Stack Operations
push(o)
pop()
Inserts object o onto
top of stack
Input: object
Output: none
Removes the top
object of stack and
returns it to calling
method
Input: none
Output: object
Related Stack Operations
isEmpty()
isFull()
Returns a boolean
indicating if stack is
empty.
Input: none
Output: boolean
Returns a boolean
indicating if stack is
full
Input: none
Output: boolean
Other Stack Operations
size() :
top()
Returns the number
of objects in stack.
Input: none
Output: integer
Returns the top
object of the stack.
Input: none
Output: object
An Array-Based Stack
Create an array A of size N
Store elements of stack S in array A
Let t (integer) - index of the top element
of stack S
S
0 1 2 3
t ... N-1
Array Implementation
Algorithm size()
return t + 1
Algorithm isempty()
return (t<0)
Algorithm push(o)
if size()=N then
throw a STACKEMPTYEXCEPTION
t=t+1
S[t]=o
Array Implementation
 Algorithm pop()
if isempty() then
throw a STACKEMPTYEXCEPTION
e=S[t]
S[t]=null
t=t-1
return e
 Algorithm top()
if isempty() then
throw a STACKEMPTYEXCEPTION
return S[t]
Class Problem
Using the stack functions, make an
algorithm that will determine that given a
string x :
a) has matching operands (i.e. (),{},[])
b) report an error if an operand is missing
Example :
x = “(12xxs3e)”, correct
x = “(sdfsdfs}”, error
Class Problem - Summary
1.
2.
3.
4.
Make an empty stack
Read characters until end of file
If the character is an open anything, push it in the stack
If it’s a close anything,then if stack is empty, report an
error, otherwise, pop the stack
5. If popped symbol is not the corresponding opening
symbol, then report an error
6. At end of file, if stack is not empty report an error
Stacks- other applications
Recursion
- i.e. computing for N factorial
Operand parsing
- evaluating an expression
- i.e. ((4*5)+(6+2)/5))
- postfix notation
A*B+C = AB*C+
function calls
- variables and routine position are saved
Stacks - Query
How can the undo/redo function be
implemented using stacks ?
QUEUES
A queue is a container of objects that are
inserted and removed according to the FIFO
principle.
Operations:
Enqueue - insert an item at the rear of
queue
 Dequeue - remove an item from the front of
the queue
Sample uses : movie line
printing queue
The Queue Abstract Data
Type
enqueue(o)
dequeue()
Insert object o at the
rear of the queue
Input: object
Output: none
Remove the object
from the front of the
queue and return it.
Input: none
Output: object
The Queue Abstract Data
Type
size() : Returns the number of objects in
the queue.
Input: none
Output:
object
isEmpty(): Return a boolean indicating if
the queue is empty.
Input: none
Output:boolean
front(): Return the front object of the
queue.
Array Implementation
Create a queue using an array in a circular
fashion
Queue consists of an N-element array Q
and two integer variables:
f : index of the front element
r: index of the element after the
rear one
Configurations : “normal”
“wrapped around”
Queue Implementation
f
Array Q
r
f is an index to a cell Q storing the first
element, r is an index to the next
available cell in Q
Queues- Example
Print Jobs
- All requests from workstations are
enqueued to the print queue on a first
come first served basis
- The current (first) printjob is dequeued
and sent to the printer for processing
Queue - Applications
I/O Request Handling
File server - Workstation (print, data
access,etc.)
Telephone Call Handling
History functions in applications
Limitations - Using Arrays
Maximum size needs to be predetermined
Potential wastage of allocated memory
Need to handle overflow
Linked List ADT
Head
next
next
next
null
Each node stores a reference to an element
and a reference, called next to another node
Singly Linked List
Queue Implementation
Nodes connected in a chain by links
head
tail
head of the list - front of the queue
tail of the list - rear of the queue
Removing at the Head
head
tail
advance head reference
head
tail
Inserting at the Tail
create a new node
head
tail
chain it and move the tail reference
head
tail
Other Advantages
Insertions and deletions are easier
compared to an array implementation
when dealing with “lists”
Linked Lists - Query
If a stack will be implemented using a
linked list, is it better to assign the head
or the tail as the top of the stack ? Why ?
Double-Ended Queues
Data structure that allows insertion and
deletion at the front and the rear end of
the queue (pronounced as “deck”)
Doubly linked lists
A node in a doubly linked list is like a
node in a singly linked list except that, in
addition to the next link, it also has a prev
link to the previous node in the list.
Advantage over singly linked lists :
deletions at the tail of the list can be done
in constant time
Doubly-Linked Lists
Linked Lists - Query
What is the running time to search for an
entry in a linked list ? Deleting from the
tail ? Inserting from the head ?