DATA STRUCTURES
Stacks & Queues
using
Linked List
Dr G.Kalyani
Department of Information Technology
VR Siddhartha engineering College
Topics
• Stacks using linked List
• Queues using Linked List
• Instead of using array, we can also use linked list to
implement stack.
• Linked list allocates the memory dynamically.
• In linked list implementation of stack, the nodes are
maintained non-contiguously in the memory.
• Each node contains a pointer to its immediate successor
node in the stack.
• Stack is said to be overflown if the space left in the memory
heap is not enough to create a node.
• The top most node in the stack always contains null in its
address field.
Linked list implementation of stack
Linked list implementation of stack
PUSH Operation
Algorithmpush ()
{
int val;
Allocatememoryto newnode;
if(newnode == NULL)
{
Writenot able to push the element;
}
else
{
read val;
newnode ->data = val;
newnode ->next= TOS;
TOS= newnode ;
writeItempushed;
}
}
PUSH Operation
POP Operation
POP Operation
Algorithm POP()
{
int item;
struct node *temp;
if (TOS == NULL)
{
write Underflow;
}
else
{
item = TOS->val;
temp = TOS;
TOS = TOS->next;
free(temp);
write Itempopped;
}
}
Algorithm display()
{
struct node *ptr;
temp=TOS;
if(TOS == NULL)
{
write Stack is empty;
}
else
{
write Printing Stack elements;
while(temp!=NULL)
{
write temp->val;
temp = temp->next;
}
}
}
Traversing or Display
Topics
• Stacks using linked List
• Queues using Linked List
Linked List Implementation of Queues
• In a linked queue, each node of the queue consists of two parts
i.e. data part and the link part.
• Each element of the queue points to its immediate next element
in the memory.
• In the linked queue, there are two pointers maintained in the
memory i.e. front pointer and rear pointer.
• The front pointer contains the address of the starting element of
the queue while the rear pointer contains the address of the last
element of the queue.
• Insertion and deletions are performed at rear and front end
respectively.
• If front and rear both are NULL, it indicates that the queue is
empty.
Linked List Implementation of Queues
Insert Operation
Insert Operation
AlgorithmInsert_Q()
{
Struct node *newnode;
Allocatememoryto newnode;
if(newnode == NULL)
{
writememorynot allocated
return;
}
else
{
newnode -> data = item;
if(front == NULL and rear==NULL)
{
front = newnode;
rear = newnode;
front -> next= NULL;
rear -> next = NULL;
}
else
{
rear -> next = newnode;
rear = newnode;
rear->next= NULL;
}
}
}
Delete Operation
Algorithm delete ()
{
struct node *ptr;
if(front == NULL and rear==NULL)
{
write UNDERFLOW;
return;
}
else
{
ptr = front;
front = front -> next;
free(ptr);
}
}
Delete Operation
Traversing or Display
Algorithm display()
{
struct node *temp;
temp = front;
if(front == NULL)
{
Write Empty queue;
}
else
{
Write Queue Elements:;
while(temp != NULL)
{
Write temp -> data;
temp = temp -> next;
}
}
}
Stacks and Queues with Linked List.pdf

Stacks and Queues with Linked List.pdf

  • 1.
    DATA STRUCTURES Stacks &Queues using Linked List Dr G.Kalyani Department of Information Technology VR Siddhartha engineering College
  • 2.
    Topics • Stacks usinglinked List • Queues using Linked List
  • 3.
    • Instead ofusing array, we can also use linked list to implement stack. • Linked list allocates the memory dynamically. • In linked list implementation of stack, the nodes are maintained non-contiguously in the memory. • Each node contains a pointer to its immediate successor node in the stack. • Stack is said to be overflown if the space left in the memory heap is not enough to create a node. • The top most node in the stack always contains null in its address field. Linked list implementation of stack
  • 4.
  • 5.
  • 6.
    Algorithmpush () { int val; Allocatememorytonewnode; if(newnode == NULL) { Writenot able to push the element; } else { read val; newnode ->data = val; newnode ->next= TOS; TOS= newnode ; writeItempushed; } } PUSH Operation
  • 7.
  • 8.
    POP Operation Algorithm POP() { intitem; struct node *temp; if (TOS == NULL) { write Underflow; } else { item = TOS->val; temp = TOS; TOS = TOS->next; free(temp); write Itempopped; } }
  • 9.
    Algorithm display() { struct node*ptr; temp=TOS; if(TOS == NULL) { write Stack is empty; } else { write Printing Stack elements; while(temp!=NULL) { write temp->val; temp = temp->next; } } } Traversing or Display
  • 10.
    Topics • Stacks usinglinked List • Queues using Linked List
  • 11.
    Linked List Implementationof Queues • In a linked queue, each node of the queue consists of two parts i.e. data part and the link part. • Each element of the queue points to its immediate next element in the memory. • In the linked queue, there are two pointers maintained in the memory i.e. front pointer and rear pointer. • The front pointer contains the address of the starting element of the queue while the rear pointer contains the address of the last element of the queue. • Insertion and deletions are performed at rear and front end respectively. • If front and rear both are NULL, it indicates that the queue is empty.
  • 12.
  • 13.
  • 14.
    Insert Operation AlgorithmInsert_Q() { Struct node*newnode; Allocatememoryto newnode; if(newnode == NULL) { writememorynot allocated return; } else { newnode -> data = item; if(front == NULL and rear==NULL) { front = newnode; rear = newnode; front -> next= NULL; rear -> next = NULL; } else { rear -> next = newnode; rear = newnode; rear->next= NULL; } } }
  • 15.
  • 16.
    Algorithm delete () { structnode *ptr; if(front == NULL and rear==NULL) { write UNDERFLOW; return; } else { ptr = front; front = front -> next; free(ptr); } } Delete Operation
  • 17.
    Traversing or Display Algorithmdisplay() { struct node *temp; temp = front; if(front == NULL) { Write Empty queue; } else { Write Queue Elements:; while(temp != NULL) { Write temp -> data; temp = temp -> next; } } }