Stack & Queue
Stack & Queue
#include <stdio.h>
#define MAX_SIZE 5
int stack[MAX_SIZE];
int top = -1;
void pop()
{
if (top == -1)
{
printf("Stack Underflow: Cannot pop element, stack is empty.\n");
}
else
{
int poppedElement = stack[top];
top--;
printf("Popped element: %d\n", poppedElement);
}
}
int peek()
{
if (top == -1)
{
printf("Stack is empty.\n");
return -1;
}
else
{
printf("Top element: %d\n", stack[top]);
return stack[top];
}
}
int isFull()
{
if (top == MAX_SIZE - 1)
{
printf("Stack is full.\n");
return 1;
}
else
{
printf("Stack is not full.\n");
return 0;
}
}
int isEmpty()
{
if (top == -1)
{
printf("Stack is empty.\n");
return 1;
}
else
{
printf("Stack is not empty.\n");
return 0;
}
}
int main()
{
// Demonstrate stack operations
push(10);
push(20);
push(30);
push(40);
push(50);
push(60); // Stack overflow
isFull();
peek();
pop();
pop();
pop();
pop();
pop();
pop(); // Stack underflow
isEmpty();
return 0;
}
Queue
#include <stdio.h>
#define MAX_SIZE 5
int queue[MAX_SIZE];
int front = -1;
int rear = -1;
void dequeue()
{
if (front == -1 || front > rear)
{
printf("Queue Underflow: Cannot dequeue element, queue is
empty.\n");
}
else
{
int dequeuedElement = queue[front];
front++;
printf("Dequeued element: %d\n", dequeuedElement);
if (front > rear)
{
front = -1;
rear = -1;
}
}
}
int peek()
{
if (front == -1 || front > rear)
{
printf("Queue is empty.\n");
return -1;
}
else
{
printf("Front element: %d\n", queue[front]);
return queue[front];
}
}
int isFull()
{
if (rear == MAX_SIZE - 1)
{
printf("Queue is full.\n");
return 1;
}
else
{
printf("Queue is not full.\n");
return 0;
}
}
int isEmpty()
{
if (front == -1 || front > rear)
{
printf("Queue is empty.\n");
return 1;
}
else
{
printf("Queue is not empty.\n");
return 0;
}
}
int main()
{
// Demonstrate queue operations
enqueue(10);
enqueue(20);
enqueue(30);
enqueue(40);
enqueue(50);
enqueue(60); // Queue overflow
isFull();
peek();
dequeue();
dequeue();
dequeue();
dequeue();
dequeue();
dequeue(); // Queue underflow
isEmpty();
return 0;
}
Circular Queue
#include <stdio.h>
#define MAX_SIZE 5
int queue[MAX_SIZE];
int front = -1;
int rear = -1;
void dequeue()
{
if (front == -1 || front == rear)
{
printf("Queue Underflow: Cannot dequeue element, queue is
empty.\n");
}
else
{
int dequeuedElement = queue[front];
front = (front + 1) % MAX_SIZE;
printf("Dequeued element: %d\n", dequeuedElement);
if (front == (rear + 1) % MAX_SIZE)
{
front = -1;
rear = -1;
}
}
}
int peek()
{
if (front == -1 || front == rear)
{
printf("Queue is empty.\n");
return -1;
}
else
{
printf("Front element: %d\n", queue[front]);
return queue[front];
}
}
int isFull()
{
if ((rear + 1) % MAX_SIZE == front)
{
printf("Queue is full.\n");
return 1;
}
else
{
printf("Queue is not full.\n");
return 0;
}
}
int isEmpty()
{
if (front == -1 || front == rear)
{
printf("Queue is empty.\n");
return 1;
}
else
{
printf("Queue is not empty.\n");
return 0;
}
}
int main()
{
// Demonstrate circular queue operations
enqueue(10);
enqueue(20);
enqueue(30);
enqueue(40);
enqueue(50);
enqueue(60); // Queue overflow
isFull();
peek();
dequeue();
dequeue();
dequeue();
dequeue();
dequeue();
dequeue(); // Queue underflow
isEmpty();
return 0;
}