A stack follows the Last In, First Out (LIFO) or First In, Last Out (FILO) order, which means that the last element added to the stack is the first one to be removed.
To manage a stack, a pointer to the top is maintained, allowing access only to the top element.
Basic operations include push, pop, peek, isempty, top, and size.
Two types of stacks exist: dynamic (adjusting size dynamically) and static (fixed size).
Stacks can be implemented using arrays or linked lists.
Implementing Stack using Arrays
Implementing Stack a Linked List
Implement a stack using singly linked list
using System;
// Create Stack Using Linked list
public class StackUsingLinkedlist {
// A linked list node
private class Node {
// integer data
public int data;
// reference variable Node type
public Node link;
}
// create global top reference variable
Node top;
// Constructor
public StackUsingLinkedlist() { this.top = null; }
// Utility function to add
// an element x in the stack
// insert at the beginning
public void push(int x)
{
// create new node temp and allocate memory
Node temp = new Node();
// check if stack (heap) is full.
// Then inserting an element
// would lead to stack overflow
if (temp == null) {
Console.Write("\nHeap Overflow");
return;
}
// initialize data into temp data field
temp.data = x;
// put top reference into temp link
temp.link = top;
// update top reference
top = temp;
}
// Utility function to check if
// the stack is empty or not
public bool isEmpty() { return top == null; }
// Utility function to return
// top element in a stack
public int peek()
{
// check for empty stack
if (!isEmpty()) {
return top.data;
}
else {
Console.WriteLine("Stack is empty");
return -1;
}
}
// Utility function to pop top element from the stack
public void pop() // remove at the beginning
{
// check for stack underflow
if (top == null) {
Console.Write("\nStack Underflow");
return;
}
// update the top pointer to
// point to the next node
top = (top).link;
}
public void display()
{
// check for stack underflow
if (top == null) {
Console.Write("\nStack Underflow");
return;
}
else {
Node temp = top;
while (temp != null) {
// print node data
Console.Write(temp.data);
// assign temp link to temp
temp = temp.link;
if(temp != null)
Console.Write(" -> ");
}
}
}
}
// Driver code
public class GFG {
public static void Main(String[] args)
{
// create Object of Implementing class
StackUsingLinkedlist obj
= new StackUsingLinkedlist();
// insert Stack value
obj.push(11);
obj.push(22);
obj.push(33);
obj.push(44);
// print Stack elements
obj.display();
// print Top element of Stack
Console.Write("\nTop element is {0}\n", obj.peek());
// Delete top element of Stack
obj.pop();
obj.pop();
// print Stack elements
obj.display();
// print Top element of Stack
Console.Write("\nTop element is {0}\n", obj.peek());
}
}
Top comments (0)