Data Structures Laboratory
Data Structures Laboratory
Data Structures Laboratory
Bengaluru - 560032
2024
Data Structures Lab BSCL305
This laboratory course enables students to get practical experience in design, develop, implement,
analyse and evaluation/testing of
● Linear data structures and their applications such as stacks, queues and lists
● Non-Linear data structures and their applications such as trees and graphs
● Implement all the programs in “C” Programming Language and Linux OS.
Programs List:
e. Display the status of Stack f. Exit Support the program with appropriate functions for
each of the above operations 15.09.2023 14.09.2023
4. Develop a Program in C for converting an Infix Expression to Postfix Expression. Program
should support for both parenthesized and free parenthesized expressions with the
operators: +, -, *, /, % (Remainder), ^ (Power) and alphanumeric operands.
5. Develop a Program in C for the following Stack Applications
a. Evaluation of Suffix expression with single digit operands and operators: +, -, *, /, %, ^
b. Solving Tower of Hanoi problem with n disks
6. Develop a menu driven Program in C for the following operations on Circular QUEUE of
Characters (Array Implementation of Queue with maximum size MAX)
a. Insert an Element on to Circular QUEUE
b. Delete an Element from Circular QUEUE
c. Demonstrate Overflow and Underflow situations on Circular QUEUE
d. Display the status of Circular QUEUE
e. Exit Support the program with appropriate functions for each of the above operations
7. Develop a menu driven Program in C for the following operations on Singly Linked List (SLL)
of Student Data with the fields: USN, Name, Programme, Sem, PhNo
a. Create a SLL of N Students Data by using front insertion.
b. Display the status of SLL and count the number of nodes in it
c. Perform Insertion / Deletion at End of SLL
d. Perform Insertion / Deletion at Front of SLL (Demonstration of stack)
e. Exit
8. Develop a menu driven Program in C for the following operations on Doubly Linked List (DLL)
of Employee Data with the fields: SSN, Name, Dept, Designation, Sal, PhNo
a. Create a DLL of N Employees Data by using end insertion.
b. Display the status of DLL and count the number of nodes in it
c. Perform Insertion and Deletion at End of DLL
d. Perform Insertion and Deletion at Front of DLL
e. Demonstrate how this DLL can be used as Double Ended Queue.
f. Exit
9. Develop a Program in C for the following operations on Singly Circular Linked List (SCLL) with
header nodes a. Represent and Evaluate a Polynomial P (x, y, z) = 6x 2 y 2 z-4yz 5 +3x 3
yz+2xy 5 z-2xyz 3 b. Find the sum of two polynomials POLY1(x, y, z) and POLY2(x, y, z) and
store the result in POLYSUM (x, y, z) Support the program with appropriate functions for
each of the above operations
10. Develop a menu driven Program in C for the following operations on Binary Search Tree
(BST) of Integers.
a. Create a BST of N Integers: 6, 9, 5, 2, 8, 15, 24, 14, 7, 8, 5, 2
b. Traverse the BST in In order, Preorder and Post Order
c. Search the BST for a given element (KEY) and report the appropriate message
d. Exit
11. Develop a Program in C for the following operations on Graph(G) of Cities
a. Create a Graph of N cities using Adjacency Matrix.
b. Print all the nodes reachable from a given starting node in a digraph using DFS/BFS
method.
12. Given a File of N employee records with a set K of Keys (4-digit) which uniquely determine
the records in file F. Assume that file F is maintained in memory by a Hash Table (HT) of m
memory locations with L as the set of memory addresses (2-digit) of locations in HT. Let the
keys in K and addresses in L are Integers. Develop a Program in C that uses Hash Function H:
K →L as H(K)=K mod m (remainder method), and implement hashing technique to map a
given key K to the address space L. Resolve the collision (if any) using linear probing.
● Demonstrate the working nature of different types of data structures and their
applications
● Use appropriate searching and sorting algorithms for the give scenario.
● Apply the appropriate data structure for solving real world problems
● Experiment distribution
o For laboratories having only one part: Students are allowed to pick one
experiment from the lot with equal opportunity.
o For laboratories having PART A and PART B: Students are allowed to pick one
experiment from PART A and one experiment from PART B, with equal
opportunity.
● Change of experiment is allowed only once and marks allotted for procedure to be made
zero of the changed part only.
● Marks Distribution (Need to change in accordance with university regulations)
a. For laboratories having only one part – Procedure + Execution + Viva-Voce:
15+70+15 = 100 Marks
b. For laboratories having PART A and PART B i. Part A – Procedure + Execution +
Viva = 6 + 28 + 6 = 40 Marks ii. Part B – Procedure + Execution + Viva = 9 + 42 + 9
= 60 Marks
Program 1:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char *dayName;
int date;
char *activity;
} Day;
// Function prototypes
int main() {
create(&calendar);
read(calendar);
display(calendar);
free(calendar[i].dayName);
free(calendar[i].activity);
free(calendar);
return 0;
if (*calendar == NULL) {
exit(EXIT_FAILURE);
};
if ((*calendar)[i].dayName == NULL) {
exit(EXIT_FAILURE);
strcpy((*calendar)[i].dayName, daysOfWeek[i]);
if ((*calendar)[i].activity == NULL) {
exit(EXIT_FAILURE);
char buffer[256];
if (scanf("%d", &calendar[i].date) != 1) {
exit(EXIT_FAILURE);
exit(EXIT_FAILURE);
if (calendar[i].activity == NULL) {
exit(EXIT_FAILURE);
strcpy(calendar[i].activity, buffer);
printf("\n**********Weekly Calendar**********\n");
printf("%-10s%-8s %-10s\n","DAY","Date","Activity");
For linux OS
./calendar
Output:
**********Weekly Calendar**********
DAY Date Activity
Monday 1 playing tennis
Tuesday 2 NO Activity
Wednesday 2 attending classes
Thursday 3 attending classes
Friday 5 playing cricket
Saturday 8 NO Activity
Sunday 5 rest
#include <stdio.h>a
#include <stdlib.h>
#include <string.h>
// Function prototypes
int main() {
printString(mainStr);
} else {
free(mainStr);
free(patternStr);
free(replaceStr);
return 0;
char buffer[1000];
strcpy(*mainStr, buffer);
strcpy(*patternStr, buffer);
strcpy(*replaceStr, buffer);
int j;
if (str[i + j] != pat[j]) {
break;
if (j == patLen) {
return i;
int i = 0, j = 0;
while (str[i]) {
if (findPattern(&str[i], pat) == 0) {
strcpy(&result[j], rep);
j += repLen;
i += patLen;
} else {
result[j++] = str[i++];
result[j] = '\0';
strcpy(str, result);
free(result);
printf("%s\n", str);
Output:
Enter the main string: The quick brown fox jumps over the lazy dog
Modified String: The quick brown cat jumps over the lazy dog
or
#include <stdio.h>
#include <string.h>
void stringmatch() {
while (str[c] != '\0') {
if (str[m] == pat[i]) {
i++;
m++;
if (pat[i] == '\0') {
flag = 1;
for (k = 0; rep[k] != '\0'; k++, j++) {
res[j] = rep[k];
}
i = 0;
c = m;
}
} else {
res[j] = str[c];
j++;
c++;
m = c;
i = 0;
}
}
res[j] = '\0';
}
int main() {
printf("Enter the main string: ");
fgets(str, sizeof(str), stdin);
str[strcspn(str, "\n")] = '\0'; // Remove trailing newline
if (flag == 1)
printf("The string after pattern match and replace is: %s\n", res);
else
printf("Pattern string is not found\n");
return 0;
}
3. Develop a menu driven Program in C for the following operations on STACK of Integers
(Array Implementation of Stack with maximum size MAX) a. Push an Element on to Stack b.
Pop an Element from Stack c. Demonstrate how Stack can be used to check Palindrome d.
Demonstrate Overflow and Underflow situations on Stack e. Display the status of Stack f.
Exit Support the program with appropriate functions for each of the above operations
#include<stdio.h>
#include<stdlib.h>
#define MAX 5
int s[MAX];
int pop();
void palindrome();
void display();
void main()
while(1)
printf("\n\n~~~~~~Menu~~~~~~ : ");
printf("\n=>4.Display ");
printf("\n=>5.Exit");
scanf("%d", &choice);
switch(choice)
scanf("%d", &item);
push(item);
break;
if(item != -1)
break;
case 3: palindrome();
break;
case 4: display();
break;
case 5: exit(1);
break;
if(top == MAX-1)
printf("\n~~~~Stack overflow~~~~");
return;
top = top + 1 ;
s[top] = item;
int pop()
int item;
if(top == -1)
printf("\n~~~~Stack underflow~~~~");
return -1;
item = s[top];
top = top - 1;
return item;
void display()
int i;
if(top == -1)
printf("\n~~~~Stack is empty~~~~");
return;
void palindrome()
int flag=1,i;
flag = 0;
break;
if(flag == 1)
else
OUTPUT:
~~~~~~Menu~~~~~~ :
=>3.Palindrome demo
=>4.Display
=>5.Exit
~~~~~~Menu~~~~~~ :
=>3.Palindrome demo
=>4.Display
=>5.Exit
~~~~~~Menu~~~~~~ :
=>3.Palindrome demo
=>4.Display
=>5.Exit
| 22 |
|1|
~~~~~~Menu~~~~~~ :
=>3.Palindrome demo
=>4.Display
=>5.Exit
~~~~~~Menu~~~~~~ :
=>3.Palindrome demo
=>4.Display
=>5.Exit
| 333 |
| 22 |
|1|
~~~~~~Menu~~~~~~ :
=>3.Palindrome demo
=>4.Display
=>5.Exit
~~~~~~Menu~~~~~~ :
=>3.Palindrome demo
=>4.Display
=>5.Exit
| 4444 |
| 333 |
| 22 |
|1|
~~~~~~Menu~~~~~~ :
=>3.Palindrome demo
=>4.Display
=>5.Exit
~~~~~~Menu~~~~~~ :
=>3.Palindrome demo
=>4.Display
=>5.Exit
~~~~Stack overflow~~~~
~~~~~~Menu~~~~~~ :
=>3.Palindrome demo
=>4.Display
=>5.Exit
| 55555 |
| 4444 |
| 333 |
| 22 |
|1|
~~~~~~Menu~~~~~~ :
=>3.Palindrome demo
=>4.Display
=>5.Exit
~~~~~~Menu~~~~~~ :
=>3.Palindrome demo
=>4.Display
=>5.Exit
| 4444 |
| 333 |
| 22 |
|1|
|1|
| 22 |
| 333 |
| 4444 |
~~~~~~Menu~~~~~~ :
=>3.Palindrome demo
=>4.Display
=>5.Exit
#include<stdio.h>
#include<stdlib.h>
void evaluate();
void push(char);
char pop();
int prec(char);
void main()
scanf("%s", infix);
evaluate();
void evaluate()
int i = 0, j = 0;
push('#');
symb = infix[i];
switch(symb)
break;
while(temp != '(' )
postfix[j] = temp;
j++;
temp = pop();
break;
case '+' :
case '-' :
case '*' :
case '/' :
case '%' :
case '^' :
temp = pop();
postfix[j] = temp;
j++;
push(symb);
break;
j++;
while(top > 0)
temp = pop();
postfix[j] = temp;
j++;
postfix[j] = '\0';
top = top+1;
stack[top] = item;
char pop()
char item;
item = stack[top];
top = top-1;
return item;
int p;
switch(symb)
break;
case '(' :
case ')' : p = 0;
break;
case '+' :
case '-' : p = 1;
break;
case '*' :
case '/' :
case '%' : p = 2;
break;
case '^' :
case '$' : p = 3;
break;
return p;
OUTPUT:
(a+b)+c/d*e
ab+cd/e*+
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
typedef struct {
int top;
int items[MAX];
} Stack;
printf("Stack is full\n");
return;
s->items[++(s->top)] = value;
if (s->top == -1) {
printf("Stack is empty\n");
return s->items[(s->top)--];
Stack s;
s.top = -1;
char *token;
if (isdigit(token[0])) {
} else {
op2 = pop(&s);
op1 = pop(&s);
switch (token[0]) {
default:
printf("Invalid operator\n");
exit(1);
push(&s, result);
int main() {
char expr[MAX];
return 0;
Output:
1.
Result: 2
2.
Result: 14
b)
#include <stdio.h>
if (n == 1) {
return;
int main() {
int n;
scanf("%d", &n);
return 0;
Output:
6. Develop a menu driven Program in C for the following operations on Circular QUEUE of Characters
(Array Implementation of Queue with maximum size MAX)
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char items[MAX];
} CircularQueue;
// Function prototypes
int main() {
CircularQueue queue;
int choice;
char item;
initializeQueue(&queue);
while (1) {
printf("5. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
if (isFull(&queue)) {
} else {
insert(&queue, item);
break;
case 2:
if (isEmpty(&queue)) {
} else {
item = delete(&queue);
break;
case 3:
demonstrateOverflowUnderflow(&queue);
break;
case 4:
display(&queue);
break;
case 5:
exit(0);
default:
return 0;
q->front = 0;
q->rear = -1;
q->size = 0;
return q->size == 0;
q->items[q->rear] = item;
q->size++;
q->size--;
return item;
if (isEmpty(q)) {
printf("Queue is empty.\n");
return;
int i, count;
printf("\n");
while (!isEmpty(q)) {
delete(q);
Output:
1. Insert an Element
2. Delete an Element
5. Exit
Inserted element: a
1. Insert an Element
2. Delete an Element
5. Exit
Inserted element: b
1. Insert an Element
2. Delete an Element
5. Exit
Inserted element: c
1. Insert an Element
2. Delete an Element
5. Exit
1. Insert an Element
2. Delete an Element
5. Exit
Queue elements: a b c
1. Insert an Element
2. Delete an Element
5. Exit
7. Develop a menu driven Program in C for the following operations on Singly Linked List (SLL) of
Student Data with the fields: USN, Name, Programme, Sem, PhNo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Function prototypes
Student* createStudent();
void displayList(Student *head);
void insertFront(Student **head, Student *newStudent);
void insertEnd(Student **head, Student *newStudent);
void deleteFront(Student **head);
void deleteEnd(Student **head);
int countNodes(Student *head);
void freeList(Student *head);
int main() {
Student *head = NULL; // Initialize head of the list
int choice;
Student *newStudent;
int nodeCount;
while (1) {
printf("\nSingly Linked List Operations Menu:\n");
printf("1. Create SLL of N Students (Front Insertion)\n");
switch (choice) {
case 1:
{
int n;
printf("Enter the number of students: ");
scanf("%d", &n);
getchar(); // Consume newline character
case 2:
displayList(head);
nodeCount = countNodes(head);
printf("Number of nodes: %d\n", nodeCount);
break;
case 3:
newStudent = createStudent();
insertEnd(&head, newStudent);
printf("Inserted student at the end of the list.\n");
break;
case 4:
deleteEnd(&head);
printf("Deleted student from the end of the list.\n");
break;
case 5:
newStudent = createStudent();
insertFront(&head, newStudent);
printf("Inserted student at the front of the list.\n");
break;
case 6:
deleteFront(&head);
case 7:
freeList(head);
exit(0);
default:
printf("Invalid choice! Please enter a number between 1 and 7.\n");
}
}
return 0;
}
newStudent->next = NULL;
return newStudent;
}
printf("Student List:\n");
Student *temp = head;
while (temp != NULL) {
printf("USN: %s\n", temp->usn);
printf("Name: %s\n", temp->name);
printf("Programme: %s\n", temp->programme);
printf("Semester: %d\n", temp->sem);
printf("Phone Number: %s\n", temp->phno);
printf("-------------\n");
temp = temp->next;
}
}
if (*head == NULL) {
printf("The list is empty. Cannot delete.\n");
return;
}
if ((*head)->next == NULL) {
free(*head);
*head = NULL;
return;
}
Output:
8. Develop a menu driven Program in C for the following operations on Doubly Linked List (DLL) of
Employee Data with the fields: SSN, Name, Dept, Designation, Sal, PhNo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DEPT_LENGTH 50
#define MAX_DESG_LENGTH 50
#define MAX_PHNO_LENGTH 15
char ssn[15];
char name[MAX_NAME_LENGTH];
char dept[MAX_DEPT_LENGTH];
char designation[MAX_DESG_LENGTH];
float sal;
char phno[MAX_PHNO_LENGTH];
} Employee;
// Function prototypes
Employee* createEmployee();
int main() {
int choice;
Employee *newEmployee;
int nodeCount;
while (1) {
printf("8. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
int n;
scanf("%d", &n);
newEmployee = createEmployee();
break;
case 2:
displayList(head);
nodeCount = countNodes(head);
break;
case 3:
newEmployee = createEmployee();
break;
case 4:
deleteEnd(&head, &tail);
break;
case 5:
newEmployee = createEmployee();
break;
case 6:
deleteFront(&head, &tail);
break;
case 7:
demonstrateDeque(head, tail);
break;
case 8:
freeList(head);
exit(0);
default:
return 0;
Employee* createEmployee() {
if (!newEmployee) {
exit(1);
scanf("%f", &newEmployee->sal);
newEmployee->next = NULL;
newEmployee->prev = NULL;
return newEmployee;
if (head == NULL) {
return;
printf("Employee List:\n");
printf("-------------\n");
temp = temp->next;
if (*tail == NULL) {
return;
(*tail)->next = newEmployee;
newEmployee->prev = *tail;
*tail = newEmployee;
if (*tail == NULL) {
return;
} else {
*tail = (*tail)->prev;
(*tail)->next = NULL;
free(temp);
if (*head == NULL) {
return;
newEmployee->next = *head;
(*head)->prev = newEmployee;
*head = newEmployee;
if (*head == NULL) {
return;
} else {
*head = (*head)->next;
(*head)->prev = NULL;
free(temp);
int count = 0;
count++;
temp = temp->next;
return count;
// Insertion at front
printf("Inserting at front:\n");
displayList(head);
// Insertion at end
printf("Inserting at end:\n");
newEmployee = createEmployee();
displayList(head);
deleteFront(&head, &tail);
displayList(head);
deleteEnd(&head, &tail);
displayList(head);
Employee *temp;
temp = head;
head = head->next;
free(temp);
Output:
8. Exit
Enter SSN: 2
Enter Designation: AP
Enter SSN: 4
Enter Department: EC
Enter Designation: AP
8. Exit
Employee List:
SSN: 2
Name: Ram
Department: CSE
Designation: AP
Salary: 10000.00
-------------
SSN: 4
Name: Gyan
Department: EC
Designation: AP
Salary: 20000.00
-------------
Number of nodes: 2
8. Exit
8. Exit
Employee List:
SSN: 4
Name: Gyan
Department: EC
Designation: AP
Salary: 20000.00
-------------
Number of nodes: 1
8. Exit
9. Develop a Program in C for the following operations on Singly Circular Linked List (SCLL) with
header nodes a. Represent and Evaluate a Polynomial P (x, y, z) = 6x 2 y 2 z-4yz 5 +3x 3 yz+2xy 5 z-
2xyz 3 b. Find the sum of two polynomials POLY1(x, y, z) and POLY2(x, y, z) and store the result in
POLYSUM (x, y, z) Support the program with appropriate functions for each of the above operations
#include <stdio.h>
#include <stdlib.h>
int coeff;
int x_exp;
int y_exp;
int z_exp;
} Node;
newNode->coeff = coeff;
newNode->x_exp = x_exp;
newNode->y_exp = y_exp;
newNode->z_exp = z_exp;
return newNode;
void insertNode(Node** header, int coeff, int x_exp, int y_exp, int z_exp) {
if (*header == NULL) {
*header = newNode;
} else {
temp = temp->next;
temp->next = newNode;
newNode->next = *header;
if (header == NULL) {
printf("Polynomial is empty.\n");
return;
do {
temp = temp->next;
if (temp != header) {
printf(" + ");
printf("\n");
int result = 0;
do {
result += termValue;
temp = temp->next;
return result;
do {
int found = 0;
do {
tempResult->coeff += temp1->coeff;
found = 1;
break;
if (!found) {
temp1 = temp1->next;
do {
int found = 0;
do {
found = 1;
break;
if (!found) {
temp2 = temp2->next;
return result;
// Main function
int main() {
insertNode(&poly1, 6, 2, 2, 1);
insertNode(&poly1, 3, 3, 1, 1);
insertNode(&poly1, 2, 1, 5, 1);
insertNode(&poly2, 2, 2, 2, 0);
// Print polynomials
printf("Polynomial 1:\n");
printPolynomial(poly1);
printf("Polynomial 2:\n");
printPolynomial(poly2);
// Evaluate polynomial 1
int x = 1, y = 1, z = 1;
// Add polynomials
printPolynomial(polySum);
return 0;
Output:
Polynomial 1:
Polynomial 2:
2*x^2*y^2*z^0 + -1*x^0*y^1*z^4
10. Develop a menu driven Program in C for the following operations on Binary Search Tree (BST) of
Integers.
#include <stdio.h>
#include <stdlib.h>
int data;
} Node;
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
if (root == NULL) {
return createNode(data);
return root;
if (root != NULL) {
inOrder(root->left);
inOrder(root->right);
if (root != NULL) {
preOrder(root->left);
preOrder(root->right);
if (root != NULL) {
postOrder(root->left);
postOrder(root->right);
return root;
while (1) {
printf("\nMenu:\n");
printf("5. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
inOrder(root);
printf("\n");
break;
case 2:
preOrder(root);
printf("\n");
break;
case 3:
postOrder(root);
printf("\n");
break;
case 4:
scanf("%d", &key);
if (search(root, key)) {
} else {
break;
case 5:
printf("Exiting...\n");
return;
default:
// Main function
int main() {
menu(root);
return 0;
Output:
Menu:
1. In-order Traversal
2. Pre-order Traversal
3. Post-order Traversal
5. Exit
In-order Traversal: 2 5 6 7 8 9 14 15 24
Menu:
1. In-order Traversal
2. Pre-order Traversal
3. Post-order Traversal
5. Exit
Pre-order Traversal: 6 5 2 9 8 7 15 14 24
Menu:
1. In-order Traversal
2. Pre-order Traversal
3. Post-order Traversal
5. Exit
Pre-order Traversal: 6 5 2 9 8 7 15 14 24
Menu:
1. In-order Traversal
2. Pre-order Traversal
3. Post-order Traversal
5. Exit
Menu:
1. In-order Traversal
2. Pre-order Traversal
3. Post-order Traversal
5. Exit
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
visited[start] = true;
queue[rear++] = start;
int main() {
int graph[MAX_VERTICES][MAX_VERTICES];
int n, e, u, v, start;
int choice;
switch (choice) {
case 1:
printf("DFS traversal starting from node %d:\n", start);
DFS(graph, n, start, visited);
printf("\n");
break;
case 2:
printf("BFS traversal starting from node %d:\n", start);
BFS(graph, n, start);
printf("\n");
break;
default:
printf("Invalid choice.\n");
}
return 0;
}
Output:
12. Given a File of N employee records with a set K of Keys (4-digit) which uniquely determine the
records in file F. Assume that file F is maintained in memory by a Hash Table (HT) of m memory
locations with L as the set of memory addresses (2-digit) of locations in HT. Let the keys in K and
addresses in L are Integers. Develop a Program in C that uses Hash Function H: K →L as H(K)=K mod
m (remainder method), and implement hashing technique to map a given key K to the address space
L. Resolve the collision (if any) using linear probing.
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int key;
} HashTable;
ht[i].isOccupied = 0;
// Hash function
return key % m;
int i = 0;
while (ht[index].isOccupied) {
if (ht[index].key == key) {
return;
i++;
if (index == originalIndex) {
return;
ht[index].key = key;
ht[index].isOccupied = 1;
printf("Hash Table:\n");
if (ht[i].isOccupied) {
} else {
int main() {
HashTable hashTable[TABLE_SIZE];
int keys[MAX_KEYS];
int n, key;
initializeHashTable(hashTable, TABLE_SIZE);
scanf("%d", &n);
scanf("%d", &keys[i]);
displayHashTable(hashTable, TABLE_SIZE);
return 0;
Output :
1234
3452
2421
4223
Hash Table:
Index 0: Empty
Index 5: Empty
Index 6: Empty
Index 7: Empty
Index 8: Empty
Index 9: Empty