MIT-Curricular/DS/C/Lab/Week7/DSwithLL.c

145 lines
2.2 KiB
C

// Write a program to implement stack & queue using Singly linked lists.
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
} node;
node *top = NULL; // For stack
node *front = NULL, *rear = NULL; // For queue
// Stack operations
void push(int x)
{
node *newNode = (node*)malloc(sizeof(node));
newNode->data = x;
newNode->next = top;
top = newNode;
}
int pop()
{
if (top == NULL)
{
printf("Stack is empty\n");
return -1;
}
int x = top->data;
node *temp = top;
top = top->next;
free(temp);
return x;
}
// Queue operations
void enqueue(int x)
{
node *newNode = (node*)malloc(sizeof(node));
newNode->data = x;
newNode->next = NULL;
if (rear == NULL)
{
front = rear = newNode;
return;
}
rear->next = newNode;
rear = newNode;
}
int dequeue()
{
if (front == NULL)
{
printf("Queue is empty\n");
return -1;
}
int x = front->data;
node *temp = front;
front = front->next;
if (front == NULL)
rear = NULL;
free(temp);
return x;
}
// Function to display stack
void displayStack()
{
node *temp = top;
while (temp != NULL)
{
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
// Function to display queue
void displayQueue()
{
node *temp = front;
while (temp != NULL)
{
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main()
{
int choice, x;
while (1)
{
printf("\n1. Push to stack\n");
printf("2. Pop from stack\n");
printf("3. Display stack\n");
printf("4. Enqueue to queue\n");
printf("5. Dequeue from queue\n");
printf("6. Display queue\n");
printf("7. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice)
{
case 1:
printf("Enter element to push: ");
scanf("%d", &x);
push(x);
break;
case 2:
x = pop();
if (x != -1)
printf("Popped element: %d\n", x);
break;
case 3:
printf("Stack: ");
displayStack();
break;
case 4:
printf("Enter element to enqueue: ");
scanf("%d", &x);
enqueue(x);
break;
case 5:
x = dequeue();
if (x != -1)
printf("Dequeued element: %d\n", x);
break;
case 6:
printf("Queue: ");
displayQueue();
break;
case 7:
exit(0);
default:
printf("Invalid choice\n");
}
}
return 0;
}