0% found this document useful (0 votes)
9 views4 pages

PROGRAM9-DSA

Uploaded by

Rakhi Sharma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views4 pages

PROGRAM9-DSA

Uploaded by

Rakhi Sharma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 4

PROGRAM-9

AIM : Write a program to implement doubly linked list for the following
operations: Create, Display, inserting, counting, searching, traversing and
deletion.
TOOLS USED : Visual Studio Code Editor
SOURCE CODE:
#include <iostream>
using namespace std;
struct Node {
int data;
Node *prev, *next;
Node(int value) : data(value), prev(nullptr), next(nullptr) {}
};
class DoublyLinkedList {
Node* head;
public:
DoublyLinkedList() : head(nullptr) {}
void create(int value) {
Node* newNode = new Node(value);
if (!head) head = newNode;
else {
Node* temp = head;
while (temp->next) temp = temp->next;
temp->next = newNode;
newNode->prev = temp; }
cout << value << " added.\n";
}
void display() {
if (!head) { cout << "List is empty!\n"; return; }
for (Node* temp = head; temp; temp = temp->next) cout << temp->data << " <-> ";
cout << "NULL\n"; }
void insert(int value, int pos) {
Node* newNode = new Node(value);
if (pos == 1) {
newNode->next = head;
if (head) head->prev = newNode;
head = newNode; }
else {
Node* temp = head;
for (int i = 1; temp && i < pos - 1; i++) temp = temp->next;
if (!temp) { cout << "Invalid position!\n"; return; }
newNode->next = temp->next;
newNode->prev = temp;
if (temp->next) temp->next->prev = newNode;
temp->next = newNode;
}
cout << value << " inserted at position " << pos << ".\n";
}
void search(int value) {
Node* temp = head;
int pos = 1;
while (temp) {
if (temp->data == value) { cout << value << " found at position " << pos << ".\n";
return; }
temp = temp->next;
pos++;
}
cout << value << " not found.\n";
}
void countNodes() {
int count = 0;
for (Node* temp = head; temp; temp = temp->next) count++;
cout << "Number of nodes: " << count << ".\n";
}
void deleteNode(int value) {
if (!head) { cout << "List is empty.\n"; return; }
Node* temp = head;
while (temp && temp->data != value) temp = temp->next;
if (!temp) { cout << value << " not found.\n"; return; }
if (temp->prev) temp->prev->next = temp->next;
else head = temp->next;
if (temp->next) temp->next->prev = temp->prev;
delete temp;
cout << value << " deleted.\n";
}
void traverse() { display(); }
};
int main() {
DoublyLinkedList list;
int choice, value, pos;
do {
cout << "\n1. Create 2. Display 3. Insert 4. Count 5. Search 6. Delete 7. Exit\nEnter
choice: ";
cin >> choice;
switch (choice) {
case 1: cout << "Enter value: "; cin >> value; list.create(value); break;
case 2: list.display(); break;
case 3: cout << "Enter value and position: "; cin >> value >> pos; list.insert(value,
pos); break;
case 4: list.countNodes(); break;
case 5: cout << "Enter value to search: "; cin >> value; list.search(value); break;
case 6: cout << "Enter value to delete: "; cin >> value; list.deleteNode(value); break;}
} while (choice != 7);
return 0;
}

OUTPUT:

LEARNING OUTCOMES:
1. Understanding Doubly Linked List: Learn to use bidirectional links to traverse nodes in
both directions.
2. Core Operations: Implement create, display, insert, count, search, traverse, and delete in
minimal, efficient code.
3. Dynamic Memory Management: Work with pointers and new/delete in C++.

You might also like