ADSA Lab
ADSA Lab
Aim:
To implement linear and binary search using both recursive and non-recursive functions in Java.
Code:
import java.util.Scanner;
// Linear Search
return -1;
return -1;
public static int binarySearchRecursive(int[] arr, int low, int high, int key) {
int n = scanner.nextInt();
// Linear Search
scanner.close();
Sample Input:
2 4 6 8 10
Actual Output:
Aim:
To implement List ADT using arrays and linked lists.
Code:
import java.util.ArrayList;
class ListUsingArray {
list.add(element);
}
public void remove(int element) {
if (list.remove(Integer.valueOf(element)))
else
class Node {
int data;
Node next;
Node(int data) {
this.data = data;
this.next = null;
class ListUsingLinkedList {
if (head == null) {
head = newNode;
} else {
current.next = newNode;
if (head.data == data) {
head = head.next;
return;
if (current.next != null) {
current.next = current.next.next;
} else {
System.out.print("List: ");
current = current.next;
System.out.println();
}
Remove: 20
Display List
Actual Output:
Added: 10
Added: 20
Added: 30
Removed: 20
Add: 15, 25
Remove: 15
Display List
Actual Output:
Added: 15
Added: 25
Removed: 15
List: 25
Aim:
To implement Stack ADT and Queue ADT using arrays.
class Stack {
this.size = size;
top = -1;
if (top == size - 1) {
System.out.println("Stack Overflow!");
} else {
stack[++top] = element;
if (top == -1) {
System.out.println("Stack Underflow!");
} else {
if (top == -1) {
System.out.println("Stack is empty!");
} else {
System.out.print("Stack: ");
}
System.out.println();
stack.push(10);
stack.push(20);
stack.display();
stack.pop();
stack.display();
Push: 10, 20
Display Stack
Pop
Display Stack
Pushed: 10
Pushed: 20
Stack: 10 20
Popped: 20
Stack: 10
class Queue {
this.size = size;
front = -1;
rear = -1;
if (rear == size - 1) {
System.out.println("Queue Overflow!");
} else {
queue[++rear] = element;
System.out.println("Queue Underflow!");
} else {
System.out.println("Queue is empty!");
} else {
System.out.print("Queue: ");
System.out.println();
queue.enqueue(30);
queue.enqueue(40);
queue.display();
queue.dequeue();
queue.display();
Enqueue: 30, 40
Display Queue
Dequeue
Display Queue
Enqueued: 30
Enqueued: 40
Queue: 30 40
Dequeued: 30
Queue: 40
Code:
import java.util.Stack;
};
char c = expression.charAt(i);
if (Character.isLetterOrDigit(c)) {
result.append(c);
else if (c == '(') {
stack.push(c);
result.append(stack.pop());
else stack.pop();
} else {
result.append(stack.pop());
stack.push(c);
while (!stack.isEmpty()) {
result.append(stack.pop());
return result.toString();
Sample Input:
5. Stack ADT and Queue ADT Implementation Using Singly Linked List
Aim:
To implement Stack ADT and Queue ADT using a singly linked list.
class Node {
int data;
Node next;
Node(int data) {
this.data = data;
this.next = null;
class StackUsingLinkedList {
public StackUsingLinkedList() {
top = null;
newNode.next = top;
top = newNode;
}
public void pop() {
if (top == null) {
System.out.println("Stack Underflow!");
} else {
top = top.next;
if (top == null) {
System.out.println("Stack is empty!");
} else {
System.out.print("Stack: ");
temp = temp.next;
System.out.println();
stack.push(10);
stack.push(20);
stack.display();
stack.pop();
stack.display();
Push: 10, 20
Display Stack
Pop
Display Stack
Pushed: 10
Pushed: 20
Stack: 20 10
Popped: 20
Stack: 10
class QueueUsingLinkedList {
public QueueUsingLinkedList() {
if (rear == null) {
} else {
rear.next = newNode;
rear = newNode;
}
System.out.println("Enqueued: " + data);
if (front == null) {
System.out.println("Queue Underflow!");
} else {
front = front.next;
if (front == null) {
System.out.println("Queue is empty!");
} else {
System.out.print("Queue: ");
temp = temp.next;
System.out.println();
queue.enqueue(40);
queue.display();
queue.dequeue();
queue.display();
Enqueue: 30, 40
Display Queue
Dequeue
Display Queue
Enqueued: 30
Enqueued: 40
Queue: 30 40
Dequeued: 30
Queue: 40
Aim:
class Dequeue {
this.size = size;
dequeue = new int[size];
front = -1;
rear = -1;
System.out.println("Dequeue Overflow!");
front = rear = 0;
dequeue[front] = data;
} else if (front == 0) {
front = size - 1;
dequeue[front] = data;
} else {
dequeue[--front] = data;
System.out.println("Dequeue Overflow!");
front = rear = 0;
dequeue[rear] = data;
rear = 0;
dequeue[rear] = data;
} else {
dequeue[++rear] = data;
}
if (front == -1) {
System.out.println("Dequeue Underflow!");
} else {
if (front == rear) {
front = 0;
} else {
front++;
if (front == -1) {
System.out.println("Dequeue Underflow!");
} else {
if (front == rear) {
} else if (rear == 0) {
rear = size - 1;
} else {
rear--;
}
}
if (front == -1) {
System.out.println("Dequeue is empty!");
} else {
System.out.print("Dequeue: ");
} else {
System.out.println();
dequeue.insertRear(10);
dequeue.insertFront(20);
dequeue.display();
dequeue.deleteFront();
dequeue.deleteRear();
dequeue.display();
InsertRear: 10
InsertFront: 20
Display Dequeue
DeleteFront
DeleteRear
Display Dequeue
Inserted at rear: 10
Inserted at front: 20
Dequeue: 20 10
Dequeue is empty!
Aim:
Code:
import java.util.PriorityQueue;
class PriorityQueueDemo {
priorityQueue.add(20);
priorityQueue.add(40);
Sample Input:
Poll
Peek
Actual Output:
Removed: 20
Aim:
To construct a Binary Search Tree (BST) and perform search and delete operations.
Code:
class Node {
int key;
this.key = key;
class BST {
Node root;
public BST() {
root = null;
if (root == null) {
return root;
return root;
}
void inorder() {
inorderRec(root);
if (root != null) {
inorderRec(root.left);
inorderRec(root.right);
else {
return root;
root = root.left;
minValue = root.key;
return minValue;
bst.insert(50);
bst.insert(30);
bst.insert(70);
bst.insert(20);
bst.insert(40);
bst.insert(60);
bst.insert(80);
bst.inorder();
System.out.println("Delete 40:");
bst.delete(40);
bst.inorder();
Sample Input:
Search: 40
Delete: 40
Inorder Traversal
Actual Output:
20 30 40 50 60 70 80
Found
Delete 40:
20 30 50 60 70 80
Aim:
Code:
import java.util.HashMap;
dictionary.put(1, "One");
dictionary.put(2, "Two");
dictionary.put(3, "Three");
dictionary.remove(3);
Sample Input:
Search: 2
Delete: 3
Display Dictionary
Actual Output:
Aim:
Code:
import java.util.Arrays;
min = dist[v];
minIndex = v;
return minIndex;
Arrays.fill(dist, INF);
dist[src] = 0;
sptSet[u] = true;
for (int v = 0; v < V; v++) {
if (!sptSet[v] && graph[u][v] != 0 && dist[u] != INF && dist[u] + graph[u][v] < dist[v]) {
int[][] graph = {
};
dijkstra(graph, 0, 5);
Sample Input:
Source: 0
Actual Output:
0 0
1 10
2 50
3 30
4 60