0% found this document useful (0 votes)
30 views30 pages

2 Stack Queue

Uploaded by

nhanvtse173664
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
30 views30 pages

2 Stack Queue

Uploaded by

nhanvtse173664
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 30

Stack and Queue

Outline
I. Stack

 Stack

 Array-based Stack

 Stack Implementation

II. Queue

 Queue

 Priority Queue

 Queue Implementation
Stack
Stack Data Structure (1/4)
 Stack Data Structure:
 Linear data structure

 It can be accessed only at one of its ends


for storing and retrieving data.

 A Last In, First Out (LIFO) data structure:

• Anything added to the stack goes on


the ‘Top’ of the stack.

• Anything removed from the stack is


taken from the ‘Top’ of the stack

• Things are removed in the reverse or-


der from that in which they were in-
serted
Stack Data Structure (2/4)
 Opeartions on a Stack :
 clear(): clear the stack

 isEmpty(): check whether if the stack is empty

 push(a): Put the element a on the top of the stack

 pop(): Take the topmost element fron the stack

 top(): return the topmost element in the stack without removing it


Stack Data Structure (3/4)
 Stack Exception:
 Operations pop and top can be performed if the stack is empty:

• StackEmptyException
Stack Data Structure (4/4)
 Applications:
 Sort of nesting (such as parenthese)

 Evaluating arithmetic expressions (and other sorts of expression)

 Keeping track of previous choices (as in backtracking)

 Undo sequence in a texy editor

 Component of the other data structure


Array-based Stack (1/2)
 Array-based Stack:
 Use an array to implement the Stack ADT (abstract data type):

• Add elements from left to right

• Use a top variable keeps track of the index of the top element


S
0 1 2 top
Array-based stack
Array-based Stack (2/2)
 Array-based Stack:
 Limitations:

• The stack may become full  thrown a exception:


– FullStackException


S
0 1 2 top
Array-based stack may become full

 Solution:

• Use Linked-list to implement the Stack


Stack Implementation (1/3)
 Array-based Stack Implementation:
class ArrayStack public boolean isEmpty()
{protected Object [] a; int top, max; { return(top==-1);}
public ArrayStack() public boolean isFull()
{ this(50); { return(top==max-1);}
} public void clear()
public ArrayStack(int max1) { top=-1;}
{ max = max1; public void push(Object x)
a = new Object[max]; { if(isFull() && !grow()) return;
top = -1; a[++top] = x;
} }
protected boolean grow() Object top() throws EmptyStackException
{ int max1 = max + max/2; { if(isEmpty()) throw new EmptyStackException();
Object [] a1 = new Object[max1]; return(a[top]);
if(a1 == null) return(false); }
for(int i =0; i<=top; i++) a1[i] = a[i]; public Object pop() throws EmptyStackException
a = a1; { if(isEmpty()) throw new EmptyStackException();
return(true); Object x = a[top];
} top--;
public boolean isEmpty() return(x);
{ return(top==-1);} }
Stack Implementation (2/3)
 Linked List-based Stack Implementation:
class Node
{ public Object info;
public Node next; Object top() throws EmptyStackException
public Node(Object x, Node
{ if(isEmpty()) throw new EmptyStackException();
p)
{ info=x; next=p; } return(head.info);
public Node(Object x) }
{ this(x,null); }
};
public Object pop() throws EmptyStackException
class LinkedStack { if(isEmpty()) throw new EmptyStackException();
{ protected Node head; Object x = head.info;
head=head.next;
public LinkedStack()
{ head = null; } return(x);
}
public boolean isEmpty()
{ return(head==null);}

public void push(Object x)


{ head = new Node(x,head);
}
Stack Implementation (3/3)
 Stack Implementation in Java.util:

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


class MyStack class MyStack
{ArrayList h; {LinkedList h;
MyStack() {h = new ArrayList();} MyStack() {h = new LinkedList();}
boolean isEmpty() boolean isEmpty()
{return(h.isEmpty());} {return(h.isEmpty());}
void push(Object x) void push(Object x)
{h.add(x); {h.add(x);
} }
Object pop() Object pop()
{if(isEmpty()) return(null); {if(isEmpty()) return(null);
return(h.remove(h.size()-1)); return(h.removeLast());
} }
} }

Arraylist-based LinkedList-based
Application Implementation
 Convert decimal integer number to binary number

public class Main


{public static void decToBin(int k)
{MyStack s = new MyStack();
System.out.print(k + " in binary system is: ");
while(k>0)
{s.push(new Integer(k%2));
k = k/2;
}
while(!s.isEmpty())
System.out.print(s.pop());
System.out.println();
}
public static void main(String [] args)
{decToBin(11);
System.out.println();
}
}
Stack Class in Java
 The Stack class implemented in Java.util package
Summary
 Stack is a linear data structure that can be accessed at only one
of its ends for storing and retrieving data.

 Stack is called an LIFO structure: last in/first out.


Reading at home

Text book: Data Structures and Algorithms in Java.

• 6 Stacks, Queues, and Deques 225


• 6.1 Stacks - 226
Queue
Queue Data Structure (1/4)
 Queue Data Structure:
 A waiting line that grows by adding el-
ements to its end and shrinks by tak-
ing elements from its front

 A First In, First Out (FIFO) data struc-


ture:

• A structure in which ends are


used:
– One for adding new element

– One for removing them


Queue Data Structure (2/4)
 Opeartions on a Queue :
 clear(): clear the queue

 isEmpty(): check whether if the stack is empty

 enqueue(a): Put the element a at the end of the queue

 pop(): Take the topmost element fron the stack

 top(): return the topmost element in the stack without removing it


Queue Data Structure (3/4)
 Opeartions on a Queue :
 clear(): clear the queue

 isEmpty(): check whether if the stack is empty

 enqueue(a): Put the element a at the end of the queue

 pop(): Take the topmost element fron the stack

 top(): return the topmost element in the stack without removing it


Queue Data Structure (4/4)
 Applications:
 Direct applications:

• Waiting list

• Access to shared resource (printer)

• Multiprogramming

 Indirect application:

• Auxiliary data structure for algorithms

• Component of other data structure


Array-based Queue (1/2)
 Array-based Queue:
 Use an array of size in a circular fashion

 Two variables keep track of the first and last:

• : index of the front element

• : index of the last element

normal configuration
Q
012 f l
wrapped-around configuration
Q
012 l f
Array-based Queue
Array-based Queue (2/2)

Array-based Queue in detail


Queue Implementation (1/3)
 Array-based Queue Implementation:
class ArrayQueue private boolean grow()
{ protected Object [] a; { int i,j;
protected int max; int max1 = max + max/2;
protected int first, last; Object [] a1 = new Object[max1];
if(a1 == null) return(false);
public ArrayQueue() if(last>=first)
{ this(10); for(i=first;i<=last;i++) a1[i-first]=a[i];
} else
public ArrayQueue(int max1) { for(i=first;i<max;i++) a1[i-first]=a[i];
{ max = max1; i = max-first;
a = new Object[max]; for(j=0;j<=last;j++) a1[i+j]=a[j];
first = last = -1; }
} a = a1;
public boolean isEmpty() first = 0;
{ return(first==-1);} last = max-1;
max = max1;
public boolean isFull() return(true);
{ return((first == 0 && }
last == max-1) || first == last+1);
}
Queue Implementation (2/3)
 Array-based Queue Implementation-cont:
void enqueue(Object x)
{ if(isFull() && !grow()) return;
if(last == max-1 || last == -1)
{ a[0] = x; last=0;
if(first==-1) first = 0;
}
else a[++last] = x;
}
Object front() throws Exception
{ if(isEmpty()) throw new Exception();
return(a[first]);
}
public Object dequeue() throws Exception
{ if(isEmpty()) throw new Exception();
Object x = a[first];
if(first == last) // only one element
{first = last = -1;}
else if(first==max-1)
first = 0;
else
first++;
return(x);
}
Queue Implementation (3/3)
 LinkedList-based Queue Implementation-cont:
class Node
{ public Object info; public Object dequeue() throws Exception
public Node next; { if(isEmpty()) throw new Exception();
public Node(Object x, Node p) Object x = head.info;
{ info=x; next=p; } head=head.next;
public Node(Object x) if(head==null) tail=null;
{ this(x,null); } return(x);
}; }

void enqueue(Object x)
class MyQueue { if(isEmpty())
{ protected Node head,tail; head = tail = new Node(x);
else
public MyQueue() { tail.next = new Node(x);
{ head = tail = null; } tail = tail.next;
}
public boolean isEmpty() }
{ return(head==null);}

Object front() throws Exception


{ if(isEmpty()) throw new Exception();
return(head.info);
}
Circular Queue
 Circular Queue:
 An extension of a regular Queue
 The last element is connected to the first element.

enqueue

enqueue 11
54
54 11 24 44 78 dequeue

78

24
dequeue
44

Regular queue Circular queue


Double-Ended Queue (1/2)
 Double-End Queue:
 In short: deque
 A linear data structure where the insertion and deletion operations are
performed from both ends.
 Though the insertion and deletion in a deque can be performed on
both ends

enqueue enqueue enqueue

54 11 24 44 78 54 11 24 44 78

dequeue dequeue
dequeue

Regular queue Double-End queue


Double-Ended Queue (2/2)
 Operations in Double-End Queue:
 Main functions:
• addFirst(a): insert a new element a at the front of the deque
• addLast(a): insert a new element a at the end of the deque
• removeFirst(): remove and return the first element/null of the deque
• removeLast(): remove and return the last element/null of the deque
 Optional:
• first() : return the first element of the deque
• last() : return the last element of the deque
• size() : return the number of elements in the deque
• isEmpty(): return a Boolean indicating whether the deque is empty
Priority Queue (1/3)
 Operations in Double-End Queue:
 Main functions:
• addFirst(a): insert a new element a at the front of the deque
• addLast(a): insert a new element a at the end of the deque
• removeFirst(): remove and return the first element/null of the deque
• removeLast(): remove and return the last element/null of the deque
 Optional:
• first() : return the first element of the deque
• last() : return the last element of the deque
• size() : return the number of elements in the deque
• isEmpty(): return a Boolean indicating whether the deque is empty

You might also like