Assignment # 2 DSA Lab
Assignment # 2 DSA Lab
Assignment # 2
Submitted to Mr. Bilal Shabbir Qaisar
Submitted by Amina Arshad
Registration no SP23-BCS-190
Subject Data Structures and Algorithms
Course code CSC-211
Question No. 01: Write the computer program to apply the concepts of
circular linked lists. The list will include the following functions:
#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
};
void insertAtEnd(Node*& head, int value) {
Node* newNode = new Node();
newNode->data = value;
if (head == NULL) {
head = newNode;
newNode->next = head;
} else {
Node* temp = head;
while (temp->next != head) {
temp = temp->next;
}
temp->next = newNode;
newNode->next = head;
}
}
void insertAtStart(Node*& head, int value) {
Node* newNode = new Node();
newNode->data = value;
if (head == NULL) {
head = newNode;
newNode->next = head;
} else {
Node* temp = head;
while (temp->next != head) {
temp = temp->next;
}
temp->next = newNode;
newNode->next = head;
head = newNode;
}
}
void insertAfterValue(Node*& head, int target, int value) {
if (head == NULL)
{
return;
}
Node* temp = head;
do {
if (temp->data == target) {
Node* newNode = new Node();
newNode->data = value;
newNode->next = temp->next;
temp->next = newNode;
return;
}
temp = temp->next;
} while (temp != head);
cout << "Value " << target << " not found in the list." << endl;
}
void deleteAtEnd(Node*& head) {
if (head == NULL) return;
if (head->next == head) {
delete head;
head = NULL;
} else {
Node* temp = head;
Node* prev = NULL;
do {
prev = temp;
temp = temp->next;
if (temp->data == value) {
prev->next = temp->next;
delete temp;
return;
}
} while (temp != head);
cout << "Value " << value << " not found in the list." << endl;
}
void displayList(Node* head) {
if (head == NULL)
{
return;
}
Node* temp = head;
do {
cout << temp->data << " ";
temp = temp->next;
} while (temp != head);
cout << endl;
}
int main() {
Node* head = NULL;
insertAtEnd(head, 10);
insertAtEnd(head, 20);
insertAtEnd(head, 30);
cout << "List after inserting values at the end: ";
displayList(head);
insertAtStart(head, 5);
cout << "List after inserting value at the start: ";
displayList(head);
deleteAtEnd(head);
cout << "List after deleting the value from the end: ";
displayList(head);
deleteAtStart(head);
cout << "List after deleting the value from the start: ";
displayList(head);
deleteSpecificValue(head, 15);
cout << "List after deleting the value 15: ";
displayList(head);
return 0;
}
Output:
#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
Node* prev;
};
if (isEmpty()) {
rear = newNode;
} else {
front->prev = newNode;
}
front = newNode;
}
if (isEmpty()) {
front = newNode;
} else {
rear->next = newNode;
}
rear = newNode;
}
if (front != NULL) {
front->prev = NULL;
} else {
rear = NULL; // If the deque becomes empty
}
delete temp;
}
if (rear != NULL) {
rear->next = NULL;
} else {
front = NULL; // If the deque becomes empty
}
delete temp;
}
int getFront() {
if (isEmpty()) {
cout << "Deque is empty." << endl;
return -1;
}
return front->data;
}
int main() {
Deque deque;
deque.deleteRear();
cout << "Deque after deleting from rear: ";
deque.display();
return 0;
}
Output: