Assigment 1
Assigment 1
-----------------------------------------------------------------------------------
------------------------
TASK 1:
#include<iostream>
#include <cassert>
template<typename T>
struct Node{
public:
Node* next;
Node* prev;
T data;
Node(T data){
this->data = data;
next = nullptr;
prev = nullptr;
}
};
template<typename T>
class deque{
Node<T>* headptr = nullptr;
Node<T>* tailptr = nullptr;
int count;
public:
deque(){
count = 0;
};
~deque(){};
bool empty() {
if (count == 0){
return true;
}
else
return false;
}
T pop_front(){
T a;
if(empty()){
cout << "Deque is empty " << endl;
}
else if(count == 1){
Node<T>* temp = headptr;
a = temp->data;
delete temp;
headptr = nullptr;
tailptr = nullptr;
count--;
return a;
}
else{
Node<T>* temp = headptr;
headptr = headptr->next;
headptr->prev = nullptr;
delete temp;
count--;
return a;
}
return a;
}
T pop_back(){
T a;
if(empty()){
cout << "Deque is empty " << endl;
}
else if(count == 1){
Node<T>* temp = headptr;
a = temp->data;
delete temp;
headptr = nullptr;
tailptr = nullptr;
count--;
return a;
}
else{
Node<T>* temp = tailptr;
tailptr = tailptr->prev;
tailptr->next = nullptr;
delete temp;
count--;
return a;
}
return a;
}
void display(){
Node<T>* temp = headptr;
while(temp != nullptr){
cout << temp->data << endl;
temp = temp->next;
}
}
};
deque.push_front(20);
assert(deque.size() == 2);
deque.push_back(40);
assert(deque.size() == 4);
// Test 4: Print and verify order (should print 20 10 30 40)
cout << "Test 4: Print deque" << endl;
deque.display(); // Expected: 20 10 30 40
cout << endl;
deque.pop_front(); // Remove 10
assert(deque.size() == 2);
deque.pop_back(); // Remove 30
assert(deque.size() == 0);
assert(deque.empty() == true);
try {
deque.pop_front();
assert(false); // Should not reach here
} catch (const runtime_error& e) {
cout << "Caught exception: " << e.what() << endl;
}
int main ()
{
// deque<int> d1;
// d1.push_front(1);
// d1.push_front(2);
// d1.push_front(3);
// d1.push_back(5);
// d1.pop_front();
// d1.pop_back();
// d1.display();
unit_test();
}
-----------------------------------------------------------------------------------
------------------------
TASK 2:
#include <iostream>
#include <vector>
using namespace std;
Item dequeue() {
if (empty()) {
throw runtime_error("Queue is empty");
}
int index = rand() % items.size();
Item item = items[index];
items[index] = items[items.size() - 1]; // Swap with the last element
items.pop_back();
return item;
}
int main() {
// RandomisedQueue<int> q;
// q.enqueue(1);
// q.enqueue(3);
// q.enqueue(5);
// q.enqueue(6);
// q.enqueue(9);
return 0;
}
-----------------------------------------------------------------------------------
------------------------
TASK 3A:
#include<iostream>
#include<fstream>
#include <vector>
#include "RandomisedQueue.cpp"
using namespace std;
template<typename Item>
void subset(RandomisedQueue<Item>&queue){
int k;
cout << "Enter the number of elements you want in the subset: ";
cin >> k;
int main(){
RandomisedQueue<char>distinct;
RandomisedQueue<string>duplicate;
char temp;
string temp2;
ifstream in("C:\\Users\\geniu\\OneDrive\\Desktop\\distinct.txt");
while(in >> temp){
distinct.enqueue(temp);
}
in.close();
distinct.display();
subset(distinct);
cout << "Subset: ";
distinct.display();
ifstream in2("C:\\Users\\geniu\\OneDrive\\Desktop\\duplicates.txt");
while(in2 >> temp2){
duplicate.enqueue(temp2);
}
in2.close();
duplicate.display();
subset(duplicate);
cout << "Subset: ";
duplicate.display();
}
-----------------------------------------------------------------------------------
------------------------
TASK 3B:
#include<iostream>
#include "Deque.cpp"
using namespace std;
bool palindrome(deque<char>d){
bool palindrome = true ;
string basepair;
if (basepair != "AT" && basepair != "TA" && basepair != "CG" && basepair !=
"GC") {
palindrome = false;
break;
}
}
return palindrome;
}
int main ()
{
deque<char> d ;
char ch;
cout << "Enter a DNA sequence (A, T, C, G) --- (PRESS 'b' to exit): " << endl;