Assignment 2
DSA
Array Class Implementation for List, Stack, and Queue ADTs
CODE:
#include <iostream>
class Array {
private:
int *arr;
int capacity;
int size;
public:
//ARRAY CONSTRUCTOR
Array(int capacity) : capacity(capacity), size(0) {
arr = new int[capacity];
}
//ARRAY DESTRUCTOR
~Array() {
delete[] arr;
}
//FUNCTION OF INSERTING ELEMENT IN THE END OF ARRAY
void insert(int element) {
if (size < capacity) {
arr[size++] = element;
} else {
std::cout << "Array is full. Cannot insert element.\n";
}
}
//FUNCTION FOR DELETING AN ELEMENT
void removeAt(int index) {
if (index < 0 || index >= size) {
std::cout << "Invalid index. Cannot remove element.\n";
} else {
for (int i = index; i < size - 1; ++i) {
arr[i] = arr[i + 1];
}
--size;
}
}
//ELEMENT RETRIEVAL FUNCTION
int getAt(int index) const {
if (index < 0 || index >= size) {
std::cout << "Invalid index. Returning -1.\n";
return -1; //IF INDEX NOT FOUND
} else {
return arr[index];
}
}
// Function to check if the array is empty
bool isEmpty() const {
return size == 0;
}
//GETTING ARRAY SIZE FUNCTION
int getSize() const {
return size;
}
};
//LIST CLASS USING ARRAY
class List : public Array {
public:
using Array::Array; // Inherit constructor
//FUNCTION TO INSERT AN ELEMENT
void insertAt(int index, int element) {
if (index < 0 || index > getSize()) {
std::cout << "Invalid index. Cannot insert element.\n";
} else {
//MAKE NEW SACE FOR ELEMENT
for (int i = getSize(); i > index; --i) {
Array::insert(getAt(i - 1));
}
//INSERTING NEW ELEMENT
Array::insert(element);
}
}
// FUNTION FOR DELETING ELEMENT AT SECIFIC INDEX
void deleteAt(int index) {
Array::removeAt(index);
}
};
//STACK USING ARRAY
class Stack : public Array {
public:
using Array::Array;
//FUNCTION TO PUSH ELEMENT IN STACK
void push(int element) {
Array::insert(element);
}
//FUNCTION TO POP ELEMENT IN STACK
void pop() {
Array::removeAt(getSize() - 1);
}
//FUNCTION TO GET TOP ELEMENT
int peek() const {
return Array::getAt(getSize() - 1);
}
};
//QUEUE USING ARRAY
class Queue : public Array {
public:
using Array::Array; // Inherit constructor
//ENQUEUE AN ELEMENT FUNCTION
void enqueue(int element) {
Array::insert(element);
}
//DEQUEUE AN ELEMENT FUNCTION
void dequeue() {
Array::removeAt(0);
}
//FUNCTION TO GET FRONT ELEMENT OF QUEUE
int front() const {
return Array::getAt(0);
}
};
int main() {
//ARRAY DEMONSTRATION
Array arr(5);
arr.insert(10);
arr.insert(20);
arr.insert(30);
std::cout << "Array: ";
for (int i = 0; i < arr.getSize(); ++i) {
std::cout << arr.getAt(i) << " ";
}
std::cout << "\n\n";
//LIST DEMONSTRATION
List myList(5);
myList.insert(10);
myList.insert(20);
myList.insert(30);
std::cout << "List: ";
for (int i = 0; i < myList.getSize(); ++i) {
std::cout << myList.getAt(i) << " ";
}
std::cout << "\n\n";
//STACK DEMONSTRATION
Stack myStack(5);
myStack.push(10);
myStack.push(20);
myStack.push(30);
std::cout << "Stack (Top to Bottom): ";
while (!myStack.isEmpty()) {
std::cout << myStack.peek() << " ";
myStack.pop();
}
std::cout << "\n\n";
// QUEUE DEMONSTRATION
Queue myQueue(5);
myQueue.enqueue(10);
myQueue.enqueue(20);
myQueue.enqueue(30);
std::cout << "Queue (Front to Rear): ";
while (!myQueue.isEmpty()) {
std::cout << myQueue.front() << " ";
myQueue.dequeue();
}
std::cout << "\n\n";
return 0;
}
OUTPUT:
Array: 10 20 30
List: 10 20 30
Stack (Top to Bottom): 30 20 10
Queue (Front to Rear): 10 20 30