SlideShare a Scribd company logo
Data Structures and
Algorithms
N Radhakrishnan
Assistant Professor
Anna University, Chennai
7 March 2024 Anna University, Chennai - 600 025 2
Topics
 Revision of Previous Session
Contents
 Cursor-based Implementation of
Lists
 Stacks
 Queues
 Applications of Stacks and Queues
 Doubly Linked Lists
7 March 2024 Anna University, Chennai - 600 025 3
Cursor Implementation
Problems with linked list implementation:
 Same language do not support pointers!
• Then how can you use linked lists ?
 new and free operations are slow
• Actually not constant time
 SOLUTION: Implement linked list on an array -
called CURSOR
7 March 2024 Anna University, Chennai - 600 025 4
Cursor Implementation - Diagram
7 March 2024 Anna University, Chennai - 600 025 5
Cursor Implementation
If L = 5, then L represents list (A, B, E)
If M = 3, then M represents list (C, D, F)
7 March 2024 Anna University, Chennai - 600 025 6
Arrays - Pros and Cons
 Pros
• Directly supported by C
• Provides random access
 Cons
• Size determined at compile time
• Inserting and deleting elements is
time consuming
7 March 2024 Anna University, Chennai - 600 025 7
Linked Lists - Pros and Cons
 Pros
• Size determined during runtime
• Inserting and deleting elements is
quick
 Cons
• No random access
• User must provide programming
support
7 March 2024 Anna University, Chennai - 600 025 8
Application of Lists
 Lists can be used
 To store the records sequentially
 For creation of stacks and queues
 For polynomial handling
 To maintain the sequence of operations
for do / undo in software
 To keep track of the history of web sites
visited
7 March 2024 Anna University, Chennai - 600 025 9
How to change the direction ?
7 March 2024 Anna University, Chennai - 600 025 10
Turntable
7 March 2024 Anna University, Chennai - 600 025 11
Another Method
7 March 2024 Anna University, Chennai - 600 025 12
Stack
7 March 2024 Anna University, Chennai - 600 025 13
What is a Stack ?
 a stack is a particular kind of abstract data
type or collection in which the fundamental
(or only) operations on the collection are the
addition of an entity to the collection, known
as push and removal of an entity, known as
pop.
7 March 2024 Anna University, Chennai - 600 025 14
Basic Principle
 The relation between the push and pop
operations is such that the stack is a Last-In-
First-Out (LIFO) data structure.
 In a LIFO data structure, the last element
added to the structure must be the first one
to be removed.
7 March 2024 Anna University, Chennai - 600 025 15
Operations on Stack
 This is equivalent to the requirement that,
considered as a linear data structure, or
more abstractly a sequential collection, the
push and pop operations occur only at one
end of the structure, referred to as the top of
the stack.
 Often a peek or top operation is also
implemented, returning the value of the top
element without removing it.
7 March 2024 Anna University, Chennai - 600 025 16
Implementation
 A stack may be implemented to have a
bounded capacity. If the stack is full and
does not contain enough space to accept an
entity to be pushed, the stack is then
considered to be in an overflow state. The
pop operation removes an item from the top
of the stack. A pop either reveals previously
concealed items or results in an empty stack,
but, if the stack is empty, it goes into
underflow state, which means no items are
present in stack to be removed.
7 March 2024 Anna University, Chennai - 600 025 17
Restricted Data Structure
 A stack is a restricted data structure,
because only a small number of operations
are performed on it. The nature of the pop
and push operations also means that stack
elements have a natural order. Elements are
removed from the stack in the reverse order
to the order of their addition. Therefore, the
lower elements are those that have been on
the stack the longest.
7 March 2024 Anna University, Chennai - 600 025 18
Examples
7 March 2024 Anna University, Chennai - 600 025 19
In Simple Words
 A stack
• Last-in, first-out (LIFO) property
 The last item placed on the stack will be
the first item removed
• Analogy
 A stack of dishes in a cafeteria
 A stack of Books
 A stack of Dosa
 A stack of Money
7 March 2024 Anna University, Chennai - 600 025 20
ADT Stack
 ADT stack operations
• Create an empty stack
• Destroy a stack
• Determine whether a stack is empty
• Add a new item
• Remove the item that was added most
recently
• Retrieve the item that was added most
recently
 A program can use a stack independently
of the stack’s implementation
7 March 2024 Anna University, Chennai - 600 025 21
Stack Operations
bool isEmpty() const;
// Determines whether a stack is empty.
// Precondition: None.
// Postcondition: Returns true if the
// stack is empty; otherwise returns
// false.
7 March 2024 Anna University, Chennai - 600 025 22
Stack Operations
bool push(StackItemType newItem);
// Adds an item to the top of a stack.
// Precondition: newItem is the item to
// be added.
// Postcondition: If the insertion is
// successful, newItem is on the top of
// the stack.
7 March 2024 Anna University, Chennai - 600 025 23
Stack Operations
bool pop(StackItemType& stackTop);
// Retrieves and removes the top of a stack
// Precondition: None.
// Postcondition: If the stack is not empty,
// stackTop contains the item that was added
// most recently and the item is removed.
// However, if the stack is empty, deletion
// is impossible and stackTop is unchanged.
7 March 2024 Anna University, Chennai - 600 025 24
Stack Operations
bool getTop(StackItemType& stackTop) const;
// Retrieves the top of a stack.
// Precondition: None.
// Postcondition: If the stack is not empty,
// stackTop contains the item that was added
// most recently. However, if the stack is
// empty, the operation fails and stackTop
// is unchanged. The stack is unchanged.
7 March 2024 Anna University, Chennai - 600 025 25
Implementation Using Arrays
7 March 2024 Anna University, Chennai - 600 025 26
The Stack Class - Public Contents
class Stack
{
public:
Stack() { size = 10; current = -1;}
int pop(){ return A[current--];}
void push(int x){A[++current] = x;}
int top(){ return A[current];}
int isEmpty(){return ( current == -1 );}
int isFull(){ return ( current == size-1);}
7 March 2024 Anna University, Chennai - 600 025 27
The Stack Class - Private Contents
private:
int object; // The data element
int current; // Index of the array
int size; // max size of the array
int A[10]; // Array of 10 elements
};
7 March 2024 Anna University, Chennai - 600 025 28
Stack - a Very Simple Application
 The simplest application of a stack is to
reverse a word.
 You push a given word to stack - letter
by letter - and then pop letters from the
stack.
7 March 2024 Anna University, Chennai - 600 025 29
Applications of Stack
 Recursion
 Decimal to Binary Conversion
 Infix to Postfix Conversion and
Evaluation of Postfix Expressions
 Rearranging Railroad Cars
 Quick Sort
 Function Calls
 Undo button in various software.
7 March 2024 Anna University, Chennai - 600 025 30
outputInBinary - Algorithm
function outputInBinary(Integer n)
Stack s = new Stack
while n > 0 do
Integer bit = n modulo 2
s.push(bit)
if s is full then
return error
end if
n = floor(n / 2)
end while
while s is not empty do
output(s.pop())
end while
end function
7 March 2024 Anna University, Chennai - 600 025 31
Algebraic Expressions
 Infix expressions
• An operator appears between its operands
 Example: a + b
 Prefix expressions
• An operator appears before its operands
 Example: + a b
 Postfix expressions
• An operator appears after its operands
 Example: a b +
7 March 2024 Anna University, Chennai - 600 025 32
A complicated example
 Infix expressions:
a + b * c + ( d * e + f ) * g
 Postfix expressions:
a b c * + d e * f + g * +
 Prefix expressions:
+ + a * b c * + * d e f g
7 March 2024 Anna University, Chennai - 600 025 33
Evaluation of Postfix Expression
7 March 2024 Anna University, Chennai - 600 025 34
Evaluation of Postfix Expression
 The calculation: 1 + 2 * 4 + 3 can be written
down like this in postfix notation with the
advantage of no precedence rules and
parentheses needed
 1 2 4 * + 3 +
 The expression is evaluated from the left to
right using a stack:
• when encountering an operand: push it
• when encountering an operator: pop two
operands, evaluate the result and push it.
7 March 2024 Anna University, Chennai - 600 025 35
7 March 2024 Anna University, Chennai - 600 025 36
Infix to Postfix Conversion
7 March 2024 Anna University, Chennai - 600 025 37
What’s this ?
7 March 2024 Anna University, Chennai - 600 025 38
Queue
7 March 2024 Anna University, Chennai - 600 025 39
Queue
 A stack is LIFO (Last-In First Out) structure.
In contrast, a queue is a FIFO (First-In First-
Out ) structure.
 In a FIFO data structure, the first element
added to the queue will be the first one to be
removed.
 A queue is a linear structure for which items
can be only inserted at one end and removed
at another end.
7 March 2024 Anna University, Chennai - 600 025 40
Operations on Queue
 We will dedicate once again six operations on
the Queue.
• You can add a person to the queue (enque),
• Look who is the first person to be serviced (front)
• Rremove the first person (dequeue) and
• Check whether the queue is empty (isEmpty).
• Also there are two more operations to create and
to destroy the queue.
7 March 2024 Anna University, Chennai - 600 025 41
Operations
 Queue create()
• Creates an empty queue
 boolean isEmpty(Queue q)
• Tells whether the queue q is empty
 enqueue(Queue q, Item e)
• Place e at the rear of the queue q
 destroy(Queue q)
• destroys queue q
7 March 2024 Anna University, Chennai - 600 025 42
Operations Continued
 Item front(Queue q)
• returns the front element in Queue q
without removing it
Precondition: q is not empty
 dequeue(Queue q)
• removes front element from the queue q
Precondition: q is not empty
7 March 2024 Anna University, Chennai - 600 025 43
Implementation Using Arrays
 If we use an array to hold queue elements,
dequeue operation at the front (start) of
the array is expensive.
 This is because we may have to shift up to
“n” elements.
 For the stack, we needed only one end; for
queue we need both.
 To get around this, we will not shift upon
removal of an element.
7 March 2024 Anna University, Chennai - 600 025 44
Snapshot of a Queue
7 March 2024 Anna University, Chennai - 600 025 45
enqueue()
7 March 2024 Anna University, Chennai - 600 025 46
enqueue() again
7 March 2024 Anna University, Chennai - 600 025 47
dequeue()
7 March 2024 Anna University, Chennai - 600 025 48
dequeue() again
7 March 2024 Anna University, Chennai - 600 025 49
Two more enqueue()
7 March 2024 Anna University, Chennai - 600 025 50
What’s Wrong ?
 We have inserts and removal running in
constant time but we created a new
problem.
 We cannot insert new elements even though
there are two places available at the start of
the array.
 Solution: allow the queue to “wrap around”.
Basic idea is to picture the array as a circular
array as show below.
7 March 2024 Anna University, Chennai - 600 025 51
Queue array wrap-around
7 March 2024 Anna University, Chennai - 600 025 52
enqueue(element)
void enqueue(int x)
{
rear = (rear+1)%size;
array[rear] = x;
noElements = noElements+1;
}
7 March 2024 Anna University, Chennai - 600 025 53
dequeue()
int dequeue()
{
int x = array[front];
front = (front+1)%size;
noElements = noElements-1;
return x;
}
7 March 2024 Anna University, Chennai - 600 025 54
isEmpty() and isFull()
int isFull()
{
return noElements == size;
}
int isEmpty()
{
return noElements == 0;
}
7 March 2024 Anna University, Chennai - 600 025 55
Pointer Based Implementation
 Possible implementations of a pointer-based
queue
• A linear linked list with two external references
 A reference to the front
 A reference to the back
• A circular linked list with one external reference
 A reference to the back
7 March 2024 Anna University, Chennai - 600 025 56
Queue - Linear and Circular List
7 March 2024 Anna University, Chennai - 600 025 57
Non-empty Queue - Insertion
7 March 2024 Anna University, Chennai - 600 025 58
Empty Queue - Insertion
7 March 2024 Anna University, Chennai - 600 025 59
Queue with more than 1 element -
Deletion
7 March 2024 Anna University, Chennai - 600 025 60
Applications of Queues
 Queue is used when things don’t have to be
processed immediatly, but have to be
processed in First In First Out order like
Breadth First Search.
 This property of Queue makes it also useful
in following kind of scenarios.
7 March 2024 Anna University, Chennai - 600 025 61
Applications of Queues
 When a resource is shared among multiple
consumers. Examples include CPU
scheduling, Disk Scheduling.
 When data is transferred asynchronously
(data not necessarily received at same rate
as sent) between two processes. Examples
include IO Buffers, pipes, file IO, etc.
 Operating systems often maintain a queue
of processes that are ready to execute or
that are waiting for a particular event to
occur.
7 March 2024 Anna University, Chennai - 600 025 62
Applications of Queues
 Computer systems must often provide a
“holding area” for messages between two
processes, two programs, or even two
systems. This holding area is usually called
a “buffer” and is often implemented as a
queue.
 Call center phone systems will use a queue
to hold people in line until a service
representative is free.
7 March 2024 Anna University, Chennai - 600 025 63
Applications of Queues
 Buffers on MP3 players and portable CD
players, iPod playlist. Playlist for jukebox -
add songs to the end, play from the front of
the list.
 Round Robin (RR) algorithm is an important
scheduling algorithm. It is used especially for
the time-sharing system. The circular queue
is used to implement such algorithms.
7 March 2024 Anna University, Chennai - 600 025 64
Why Doubly Linked List ?
 given only the pointer location, we cannot access its
predecessor in the list.
 Another task that is difficult to perform on a linear
linked list is traversing the list in reverse.
 Doubly linked list A linked list in which each node is
linked to both its successor and its predecessor
 In such a case, where we need to access the node
that precedes a given node, a doubly linked list is
useful.
7 March 2024 Anna University, Chennai - 600 025 65
Doubly Linked List
 In a doubly linked list, the nodes are linked
in both directions. Each node of a doubly
linked list contains three parts:
• Info: the data stored in the node
• Next: the pointer to the following node
• Back: the pointer to the preceding node
7 March 2024 Anna University, Chennai - 600 025 66
Operations on Doubly Linked Lists
 The algorithms for the insertion and deletion
operations on a doubly linked list are
somewhat more complicated than the
corresponding operations on a singly linked
list.
 The reason is clear: There are more pointers
to keep track of in a doubly linked list.
7 March 2024 Anna University, Chennai - 600 025 67
Inserting Item
 As an example, consider the Inserting an
item.
 To link the new node, after a given node, in a
singly linked list, we need to change two
pointers:
• newNode->next and
• location->next.
 The same operation on a doubly linked list
requires four pointer changes.
7 March 2024 Anna University, Chennai - 600 025 68
Singly Linked List Insertion
7 March 2024 Anna University, Chennai - 600 025 69
Doubly Linked List Insertion
7 March 2024 Anna University, Chennai - 600 025 70
The Order is Important
7 March 2024 Anna University, Chennai - 600 025 71
Doubly Linked List - Deletion
 One useful feature of a doubly linked list is
its elimination of the need for a pointer to a
node's predecessor to delete the node.
 Through the back member, we can alter the
next member of the preceding node to make
it jump over the unwanted node.
 Then we make the back pointer of the
succeeding node point to the preceding
node.
7 March 2024 Anna University, Chennai - 600 025 72
Doubly Linked List - Deletion
7 March 2024 Anna University, Chennai - 600 025 73
Special Cases of Deletion
 We do, however, have to be careful about the
end cases:
• If location->back is NULL, we are deleting the
first node
• if location->next is NULL, we are deleting the last
node.
• If both location->back and location->next are
NULL, we are deleting the only node.
7 March 2024 Anna University, Chennai - 600 025 74
Interaction

More Related Content

Similar to Data Structures and Algorithms (DSA) is a fundamental part of Computer Science that teaches you how to think and solve complex problems systematically. (20)

DOC
Data Structure
Ibrahim MH
 
PPTX
My lecture stack_queue_operation
Senthil Kumar
 
PPTX
DSVIDEO.pptx data structure for bca and bsc cs students to higher
shunmugavadivoot
 
PPTX
01-Introduction of DSA-1.pptx
DwijBaxi
 
PPTX
Data Structures Stack and Queue Data Structures
poongothai11
 
PPTX
Data structure , stack , queue
Rajkiran Nadar
 
PPTX
Stacks.pptx in software engineering in simple understanding
MohammedAnas871930
 
PPTX
DATA STRUCTURE AND COMPUTER ALGORITHMS LECTURE 2
emathemathematics
 
PPTX
stacks and queues for public
iqbalphy1
 
PPTX
Stack and its operations, Queue and its operations
poongothai11
 
PPT
Data Structures by Maneesh Boddu
maneesh boddu
 
PPTX
Unit II - LINEAR DATA STRUCTURES
Usha Mahalingam
 
PPTX
Stack and queue
CHANDAN KUMAR
 
PDF
Chapter 5 Stack and Queue.pdf
GirT2
 
DOCX
Stacks in data structure
lodhran-hayat
 
PPTX
STACK.pptx
Dr.Shweta
 
PPTX
Stack_and_Queue_Presentation_Final (1).pptx
binduraniha86
 
PPTX
Stack_and_Queue_Presentation_Final (1).pptx
binduraniha86
 
PPTX
U3.stack queue
Ssankett Negi
 
Data Structure
Ibrahim MH
 
My lecture stack_queue_operation
Senthil Kumar
 
DSVIDEO.pptx data structure for bca and bsc cs students to higher
shunmugavadivoot
 
01-Introduction of DSA-1.pptx
DwijBaxi
 
Data Structures Stack and Queue Data Structures
poongothai11
 
Data structure , stack , queue
Rajkiran Nadar
 
Stacks.pptx in software engineering in simple understanding
MohammedAnas871930
 
DATA STRUCTURE AND COMPUTER ALGORITHMS LECTURE 2
emathemathematics
 
stacks and queues for public
iqbalphy1
 
Stack and its operations, Queue and its operations
poongothai11
 
Data Structures by Maneesh Boddu
maneesh boddu
 
Unit II - LINEAR DATA STRUCTURES
Usha Mahalingam
 
Stack and queue
CHANDAN KUMAR
 
Chapter 5 Stack and Queue.pdf
GirT2
 
Stacks in data structure
lodhran-hayat
 
STACK.pptx
Dr.Shweta
 
Stack_and_Queue_Presentation_Final (1).pptx
binduraniha86
 
Stack_and_Queue_Presentation_Final (1).pptx
binduraniha86
 
U3.stack queue
Ssankett Negi
 

More from ssuser6478a8 (12)

PPT
CSS is the language we use to style a Web page. CSS stands for Cascading Styl...
ssuser6478a8
 
PPTX
React is a free and open-source front-end JavaScript library for building use...
ssuser6478a8
 
PPTX
2023-12-15T16_13_17.575Z-SIF Space Hackathon 2023 _ Submission Template.pptx
ssuser6478a8
 
PPT
HTML is a markup language used by the browser to manipulate text, images, and...
ssuser6478a8
 
PPTX
Buila a Personalized Online course Recommender System with Machine Learning
ssuser6478a8
 
PPTX
5G is the fifth-generation technology standard for cellular networks, which c...
ssuser6478a8
 
PPT
HTML element is everything between the start tag and the end tag
ssuser6478a8
 
PPT
Data mining is the statistical technique of processing raw data in a structur...
ssuser6478a8
 
PDF
HTML stands for HyperText Markup Language. It is used to design web pages usi...
ssuser6478a8
 
PPT
Arrays are used to store multiple values in a single variable, instead of dec...
ssuser6478a8
 
PPTX
Network Security and its applications in
ssuser6478a8
 
PPT
Arrays and with its types and elements in java
ssuser6478a8
 
CSS is the language we use to style a Web page. CSS stands for Cascading Styl...
ssuser6478a8
 
React is a free and open-source front-end JavaScript library for building use...
ssuser6478a8
 
2023-12-15T16_13_17.575Z-SIF Space Hackathon 2023 _ Submission Template.pptx
ssuser6478a8
 
HTML is a markup language used by the browser to manipulate text, images, and...
ssuser6478a8
 
Buila a Personalized Online course Recommender System with Machine Learning
ssuser6478a8
 
5G is the fifth-generation technology standard for cellular networks, which c...
ssuser6478a8
 
HTML element is everything between the start tag and the end tag
ssuser6478a8
 
Data mining is the statistical technique of processing raw data in a structur...
ssuser6478a8
 
HTML stands for HyperText Markup Language. It is used to design web pages usi...
ssuser6478a8
 
Arrays are used to store multiple values in a single variable, instead of dec...
ssuser6478a8
 
Network Security and its applications in
ssuser6478a8
 
Arrays and with its types and elements in java
ssuser6478a8
 
Ad

Recently uploaded (20)

PDF
Exploring the Different Types of Experimental Research
Thelma Villaflores
 
PPTX
HUMAN RESOURCE MANAGEMENT: RECRUITMENT, SELECTION, PLACEMENT, DEPLOYMENT, TRA...
PRADEEP ABOTHU
 
PDF
Isharyanti-2025-Cross Language Communication in Indonesian Language
Neny Isharyanti
 
PPTX
grade 5 lesson matatag ENGLISH 5_Q1_PPT_WEEK4.pptx
SireQuinn
 
PPTX
PPT-Q1-WK-3-ENGLISH Revised Matatag Grade 3.pptx
reijhongidayawan02
 
PDF
Reconstruct, Restore, Reimagine: New Perspectives on Stoke Newington’s Histor...
History of Stoke Newington
 
PDF
Geographical diversity of India short notes by sandeep swamy
Sandeep Swamy
 
PDF
QNL June Edition hosted by Pragya the official Quiz Club of the University of...
Pragya - UEM Kolkata Quiz Club
 
PPTX
care of patient with elimination needs.pptx
Rekhanjali Gupta
 
PPTX
How to Handle Salesperson Commision in Odoo 18 Sales
Celine George
 
PDF
The Different Types of Non-Experimental Research
Thelma Villaflores
 
PDF
Stokey: A Jewish Village by Rachel Kolsky
History of Stoke Newington
 
PDF
The History of Phone Numbers in Stoke Newington by Billy Thomas
History of Stoke Newington
 
PPTX
Post Dated Cheque(PDC) Management in Odoo 18
Celine George
 
PPTX
Neurodivergent Friendly Schools - Slides from training session
Pooky Knightsmith
 
PDF
Geographical Diversity of India 100 Mcq.pdf/ 7th class new ncert /Social/Samy...
Sandeep Swamy
 
PDF
Biological Bilingual Glossary Hindi and English Medium
World of Wisdom
 
PDF
Knee Extensor Mechanism Injuries - Orthopedic Radiologic Imaging
Sean M. Fox
 
PDF
Aprendendo Arquitetura Framework Salesforce - Dia 03
Mauricio Alexandre Silva
 
PPTX
Identifying elements in the story. Arrange the events in the story
geraldineamahido2
 
Exploring the Different Types of Experimental Research
Thelma Villaflores
 
HUMAN RESOURCE MANAGEMENT: RECRUITMENT, SELECTION, PLACEMENT, DEPLOYMENT, TRA...
PRADEEP ABOTHU
 
Isharyanti-2025-Cross Language Communication in Indonesian Language
Neny Isharyanti
 
grade 5 lesson matatag ENGLISH 5_Q1_PPT_WEEK4.pptx
SireQuinn
 
PPT-Q1-WK-3-ENGLISH Revised Matatag Grade 3.pptx
reijhongidayawan02
 
Reconstruct, Restore, Reimagine: New Perspectives on Stoke Newington’s Histor...
History of Stoke Newington
 
Geographical diversity of India short notes by sandeep swamy
Sandeep Swamy
 
QNL June Edition hosted by Pragya the official Quiz Club of the University of...
Pragya - UEM Kolkata Quiz Club
 
care of patient with elimination needs.pptx
Rekhanjali Gupta
 
How to Handle Salesperson Commision in Odoo 18 Sales
Celine George
 
The Different Types of Non-Experimental Research
Thelma Villaflores
 
Stokey: A Jewish Village by Rachel Kolsky
History of Stoke Newington
 
The History of Phone Numbers in Stoke Newington by Billy Thomas
History of Stoke Newington
 
Post Dated Cheque(PDC) Management in Odoo 18
Celine George
 
Neurodivergent Friendly Schools - Slides from training session
Pooky Knightsmith
 
Geographical Diversity of India 100 Mcq.pdf/ 7th class new ncert /Social/Samy...
Sandeep Swamy
 
Biological Bilingual Glossary Hindi and English Medium
World of Wisdom
 
Knee Extensor Mechanism Injuries - Orthopedic Radiologic Imaging
Sean M. Fox
 
Aprendendo Arquitetura Framework Salesforce - Dia 03
Mauricio Alexandre Silva
 
Identifying elements in the story. Arrange the events in the story
geraldineamahido2
 
Ad

Data Structures and Algorithms (DSA) is a fundamental part of Computer Science that teaches you how to think and solve complex problems systematically.

  • 1. Data Structures and Algorithms N Radhakrishnan Assistant Professor Anna University, Chennai
  • 2. 7 March 2024 Anna University, Chennai - 600 025 2 Topics  Revision of Previous Session Contents  Cursor-based Implementation of Lists  Stacks  Queues  Applications of Stacks and Queues  Doubly Linked Lists
  • 3. 7 March 2024 Anna University, Chennai - 600 025 3 Cursor Implementation Problems with linked list implementation:  Same language do not support pointers! • Then how can you use linked lists ?  new and free operations are slow • Actually not constant time  SOLUTION: Implement linked list on an array - called CURSOR
  • 4. 7 March 2024 Anna University, Chennai - 600 025 4 Cursor Implementation - Diagram
  • 5. 7 March 2024 Anna University, Chennai - 600 025 5 Cursor Implementation If L = 5, then L represents list (A, B, E) If M = 3, then M represents list (C, D, F)
  • 6. 7 March 2024 Anna University, Chennai - 600 025 6 Arrays - Pros and Cons  Pros • Directly supported by C • Provides random access  Cons • Size determined at compile time • Inserting and deleting elements is time consuming
  • 7. 7 March 2024 Anna University, Chennai - 600 025 7 Linked Lists - Pros and Cons  Pros • Size determined during runtime • Inserting and deleting elements is quick  Cons • No random access • User must provide programming support
  • 8. 7 March 2024 Anna University, Chennai - 600 025 8 Application of Lists  Lists can be used  To store the records sequentially  For creation of stacks and queues  For polynomial handling  To maintain the sequence of operations for do / undo in software  To keep track of the history of web sites visited
  • 9. 7 March 2024 Anna University, Chennai - 600 025 9 How to change the direction ?
  • 10. 7 March 2024 Anna University, Chennai - 600 025 10 Turntable
  • 11. 7 March 2024 Anna University, Chennai - 600 025 11 Another Method
  • 12. 7 March 2024 Anna University, Chennai - 600 025 12 Stack
  • 13. 7 March 2024 Anna University, Chennai - 600 025 13 What is a Stack ?  a stack is a particular kind of abstract data type or collection in which the fundamental (or only) operations on the collection are the addition of an entity to the collection, known as push and removal of an entity, known as pop.
  • 14. 7 March 2024 Anna University, Chennai - 600 025 14 Basic Principle  The relation between the push and pop operations is such that the stack is a Last-In- First-Out (LIFO) data structure.  In a LIFO data structure, the last element added to the structure must be the first one to be removed.
  • 15. 7 March 2024 Anna University, Chennai - 600 025 15 Operations on Stack  This is equivalent to the requirement that, considered as a linear data structure, or more abstractly a sequential collection, the push and pop operations occur only at one end of the structure, referred to as the top of the stack.  Often a peek or top operation is also implemented, returning the value of the top element without removing it.
  • 16. 7 March 2024 Anna University, Chennai - 600 025 16 Implementation  A stack may be implemented to have a bounded capacity. If the stack is full and does not contain enough space to accept an entity to be pushed, the stack is then considered to be in an overflow state. The pop operation removes an item from the top of the stack. A pop either reveals previously concealed items or results in an empty stack, but, if the stack is empty, it goes into underflow state, which means no items are present in stack to be removed.
  • 17. 7 March 2024 Anna University, Chennai - 600 025 17 Restricted Data Structure  A stack is a restricted data structure, because only a small number of operations are performed on it. The nature of the pop and push operations also means that stack elements have a natural order. Elements are removed from the stack in the reverse order to the order of their addition. Therefore, the lower elements are those that have been on the stack the longest.
  • 18. 7 March 2024 Anna University, Chennai - 600 025 18 Examples
  • 19. 7 March 2024 Anna University, Chennai - 600 025 19 In Simple Words  A stack • Last-in, first-out (LIFO) property  The last item placed on the stack will be the first item removed • Analogy  A stack of dishes in a cafeteria  A stack of Books  A stack of Dosa  A stack of Money
  • 20. 7 March 2024 Anna University, Chennai - 600 025 20 ADT Stack  ADT stack operations • Create an empty stack • Destroy a stack • Determine whether a stack is empty • Add a new item • Remove the item that was added most recently • Retrieve the item that was added most recently  A program can use a stack independently of the stack’s implementation
  • 21. 7 March 2024 Anna University, Chennai - 600 025 21 Stack Operations bool isEmpty() const; // Determines whether a stack is empty. // Precondition: None. // Postcondition: Returns true if the // stack is empty; otherwise returns // false.
  • 22. 7 March 2024 Anna University, Chennai - 600 025 22 Stack Operations bool push(StackItemType newItem); // Adds an item to the top of a stack. // Precondition: newItem is the item to // be added. // Postcondition: If the insertion is // successful, newItem is on the top of // the stack.
  • 23. 7 March 2024 Anna University, Chennai - 600 025 23 Stack Operations bool pop(StackItemType& stackTop); // Retrieves and removes the top of a stack // Precondition: None. // Postcondition: If the stack is not empty, // stackTop contains the item that was added // most recently and the item is removed. // However, if the stack is empty, deletion // is impossible and stackTop is unchanged.
  • 24. 7 March 2024 Anna University, Chennai - 600 025 24 Stack Operations bool getTop(StackItemType& stackTop) const; // Retrieves the top of a stack. // Precondition: None. // Postcondition: If the stack is not empty, // stackTop contains the item that was added // most recently. However, if the stack is // empty, the operation fails and stackTop // is unchanged. The stack is unchanged.
  • 25. 7 March 2024 Anna University, Chennai - 600 025 25 Implementation Using Arrays
  • 26. 7 March 2024 Anna University, Chennai - 600 025 26 The Stack Class - Public Contents class Stack { public: Stack() { size = 10; current = -1;} int pop(){ return A[current--];} void push(int x){A[++current] = x;} int top(){ return A[current];} int isEmpty(){return ( current == -1 );} int isFull(){ return ( current == size-1);}
  • 27. 7 March 2024 Anna University, Chennai - 600 025 27 The Stack Class - Private Contents private: int object; // The data element int current; // Index of the array int size; // max size of the array int A[10]; // Array of 10 elements };
  • 28. 7 March 2024 Anna University, Chennai - 600 025 28 Stack - a Very Simple Application  The simplest application of a stack is to reverse a word.  You push a given word to stack - letter by letter - and then pop letters from the stack.
  • 29. 7 March 2024 Anna University, Chennai - 600 025 29 Applications of Stack  Recursion  Decimal to Binary Conversion  Infix to Postfix Conversion and Evaluation of Postfix Expressions  Rearranging Railroad Cars  Quick Sort  Function Calls  Undo button in various software.
  • 30. 7 March 2024 Anna University, Chennai - 600 025 30 outputInBinary - Algorithm function outputInBinary(Integer n) Stack s = new Stack while n > 0 do Integer bit = n modulo 2 s.push(bit) if s is full then return error end if n = floor(n / 2) end while while s is not empty do output(s.pop()) end while end function
  • 31. 7 March 2024 Anna University, Chennai - 600 025 31 Algebraic Expressions  Infix expressions • An operator appears between its operands  Example: a + b  Prefix expressions • An operator appears before its operands  Example: + a b  Postfix expressions • An operator appears after its operands  Example: a b +
  • 32. 7 March 2024 Anna University, Chennai - 600 025 32 A complicated example  Infix expressions: a + b * c + ( d * e + f ) * g  Postfix expressions: a b c * + d e * f + g * +  Prefix expressions: + + a * b c * + * d e f g
  • 33. 7 March 2024 Anna University, Chennai - 600 025 33 Evaluation of Postfix Expression
  • 34. 7 March 2024 Anna University, Chennai - 600 025 34 Evaluation of Postfix Expression  The calculation: 1 + 2 * 4 + 3 can be written down like this in postfix notation with the advantage of no precedence rules and parentheses needed  1 2 4 * + 3 +  The expression is evaluated from the left to right using a stack: • when encountering an operand: push it • when encountering an operator: pop two operands, evaluate the result and push it.
  • 35. 7 March 2024 Anna University, Chennai - 600 025 35
  • 36. 7 March 2024 Anna University, Chennai - 600 025 36 Infix to Postfix Conversion
  • 37. 7 March 2024 Anna University, Chennai - 600 025 37 What’s this ?
  • 38. 7 March 2024 Anna University, Chennai - 600 025 38 Queue
  • 39. 7 March 2024 Anna University, Chennai - 600 025 39 Queue  A stack is LIFO (Last-In First Out) structure. In contrast, a queue is a FIFO (First-In First- Out ) structure.  In a FIFO data structure, the first element added to the queue will be the first one to be removed.  A queue is a linear structure for which items can be only inserted at one end and removed at another end.
  • 40. 7 March 2024 Anna University, Chennai - 600 025 40 Operations on Queue  We will dedicate once again six operations on the Queue. • You can add a person to the queue (enque), • Look who is the first person to be serviced (front) • Rremove the first person (dequeue) and • Check whether the queue is empty (isEmpty). • Also there are two more operations to create and to destroy the queue.
  • 41. 7 March 2024 Anna University, Chennai - 600 025 41 Operations  Queue create() • Creates an empty queue  boolean isEmpty(Queue q) • Tells whether the queue q is empty  enqueue(Queue q, Item e) • Place e at the rear of the queue q  destroy(Queue q) • destroys queue q
  • 42. 7 March 2024 Anna University, Chennai - 600 025 42 Operations Continued  Item front(Queue q) • returns the front element in Queue q without removing it Precondition: q is not empty  dequeue(Queue q) • removes front element from the queue q Precondition: q is not empty
  • 43. 7 March 2024 Anna University, Chennai - 600 025 43 Implementation Using Arrays  If we use an array to hold queue elements, dequeue operation at the front (start) of the array is expensive.  This is because we may have to shift up to “n” elements.  For the stack, we needed only one end; for queue we need both.  To get around this, we will not shift upon removal of an element.
  • 44. 7 March 2024 Anna University, Chennai - 600 025 44 Snapshot of a Queue
  • 45. 7 March 2024 Anna University, Chennai - 600 025 45 enqueue()
  • 46. 7 March 2024 Anna University, Chennai - 600 025 46 enqueue() again
  • 47. 7 March 2024 Anna University, Chennai - 600 025 47 dequeue()
  • 48. 7 March 2024 Anna University, Chennai - 600 025 48 dequeue() again
  • 49. 7 March 2024 Anna University, Chennai - 600 025 49 Two more enqueue()
  • 50. 7 March 2024 Anna University, Chennai - 600 025 50 What’s Wrong ?  We have inserts and removal running in constant time but we created a new problem.  We cannot insert new elements even though there are two places available at the start of the array.  Solution: allow the queue to “wrap around”. Basic idea is to picture the array as a circular array as show below.
  • 51. 7 March 2024 Anna University, Chennai - 600 025 51 Queue array wrap-around
  • 52. 7 March 2024 Anna University, Chennai - 600 025 52 enqueue(element) void enqueue(int x) { rear = (rear+1)%size; array[rear] = x; noElements = noElements+1; }
  • 53. 7 March 2024 Anna University, Chennai - 600 025 53 dequeue() int dequeue() { int x = array[front]; front = (front+1)%size; noElements = noElements-1; return x; }
  • 54. 7 March 2024 Anna University, Chennai - 600 025 54 isEmpty() and isFull() int isFull() { return noElements == size; } int isEmpty() { return noElements == 0; }
  • 55. 7 March 2024 Anna University, Chennai - 600 025 55 Pointer Based Implementation  Possible implementations of a pointer-based queue • A linear linked list with two external references  A reference to the front  A reference to the back • A circular linked list with one external reference  A reference to the back
  • 56. 7 March 2024 Anna University, Chennai - 600 025 56 Queue - Linear and Circular List
  • 57. 7 March 2024 Anna University, Chennai - 600 025 57 Non-empty Queue - Insertion
  • 58. 7 March 2024 Anna University, Chennai - 600 025 58 Empty Queue - Insertion
  • 59. 7 March 2024 Anna University, Chennai - 600 025 59 Queue with more than 1 element - Deletion
  • 60. 7 March 2024 Anna University, Chennai - 600 025 60 Applications of Queues  Queue is used when things don’t have to be processed immediatly, but have to be processed in First In First Out order like Breadth First Search.  This property of Queue makes it also useful in following kind of scenarios.
  • 61. 7 March 2024 Anna University, Chennai - 600 025 61 Applications of Queues  When a resource is shared among multiple consumers. Examples include CPU scheduling, Disk Scheduling.  When data is transferred asynchronously (data not necessarily received at same rate as sent) between two processes. Examples include IO Buffers, pipes, file IO, etc.  Operating systems often maintain a queue of processes that are ready to execute or that are waiting for a particular event to occur.
  • 62. 7 March 2024 Anna University, Chennai - 600 025 62 Applications of Queues  Computer systems must often provide a “holding area” for messages between two processes, two programs, or even two systems. This holding area is usually called a “buffer” and is often implemented as a queue.  Call center phone systems will use a queue to hold people in line until a service representative is free.
  • 63. 7 March 2024 Anna University, Chennai - 600 025 63 Applications of Queues  Buffers on MP3 players and portable CD players, iPod playlist. Playlist for jukebox - add songs to the end, play from the front of the list.  Round Robin (RR) algorithm is an important scheduling algorithm. It is used especially for the time-sharing system. The circular queue is used to implement such algorithms.
  • 64. 7 March 2024 Anna University, Chennai - 600 025 64 Why Doubly Linked List ?  given only the pointer location, we cannot access its predecessor in the list.  Another task that is difficult to perform on a linear linked list is traversing the list in reverse.  Doubly linked list A linked list in which each node is linked to both its successor and its predecessor  In such a case, where we need to access the node that precedes a given node, a doubly linked list is useful.
  • 65. 7 March 2024 Anna University, Chennai - 600 025 65 Doubly Linked List  In a doubly linked list, the nodes are linked in both directions. Each node of a doubly linked list contains three parts: • Info: the data stored in the node • Next: the pointer to the following node • Back: the pointer to the preceding node
  • 66. 7 March 2024 Anna University, Chennai - 600 025 66 Operations on Doubly Linked Lists  The algorithms for the insertion and deletion operations on a doubly linked list are somewhat more complicated than the corresponding operations on a singly linked list.  The reason is clear: There are more pointers to keep track of in a doubly linked list.
  • 67. 7 March 2024 Anna University, Chennai - 600 025 67 Inserting Item  As an example, consider the Inserting an item.  To link the new node, after a given node, in a singly linked list, we need to change two pointers: • newNode->next and • location->next.  The same operation on a doubly linked list requires four pointer changes.
  • 68. 7 March 2024 Anna University, Chennai - 600 025 68 Singly Linked List Insertion
  • 69. 7 March 2024 Anna University, Chennai - 600 025 69 Doubly Linked List Insertion
  • 70. 7 March 2024 Anna University, Chennai - 600 025 70 The Order is Important
  • 71. 7 March 2024 Anna University, Chennai - 600 025 71 Doubly Linked List - Deletion  One useful feature of a doubly linked list is its elimination of the need for a pointer to a node's predecessor to delete the node.  Through the back member, we can alter the next member of the preceding node to make it jump over the unwanted node.  Then we make the back pointer of the succeeding node point to the preceding node.
  • 72. 7 March 2024 Anna University, Chennai - 600 025 72 Doubly Linked List - Deletion
  • 73. 7 March 2024 Anna University, Chennai - 600 025 73 Special Cases of Deletion  We do, however, have to be careful about the end cases: • If location->back is NULL, we are deleting the first node • if location->next is NULL, we are deleting the last node. • If both location->back and location->next are NULL, we are deleting the only node.
  • 74. 7 March 2024 Anna University, Chennai - 600 025 74 Interaction