DSA C++ Project – Traffic Light Simulation
by DataFlair Team
Program 1
// Project: Traffic Light Simulation Using Queue Linked List
//----------------------------------------------------------
// Features:
// Add vehicles to queue (simulating arrival)
// Process vehicles when the signal turns green
// Show vehicles in the queue
// Count waiting vehicles
// Clear All Vehicles (Emergency Clear Signal)
//Search for a Vehicle by Number
//Display First and Last Vehicle in Queue
//Log of Passed Vehicles
#include <iostream>
#include <string>
using namespace std;
class Vehicle // Node Class
{
public:
string number;
Vehicle* next;
// Vehicle(string num)
// {
// this->number=num;
// this->next=nullptr;
// }
Vehicle(string num) : number(num), next(nullptr) {}
};
class TrafficQueue
{
public:
Vehicle* front;
Vehicle* rear;
Vehicle* passedLog;
public:
TrafficQueue() : front(nullptr), rear(nullptr), passedLog(nullptr) {}
void arriveVehicle(const string& number)
{
Vehicle* temp = new Vehicle(number);
if (rear==nullptr)
{
front = rear = temp;
}
else
{
rear->next = temp;
rear = temp;
}
cout << "\n Vehicle " << number << " arrived at the signal." << endl;
}
void logPassedVehicle(const string& number)
{
Vehicle* temp = new Vehicle(number);
if (passedLog==nullptr)
{
passedLog = temp;
} else
{
Vehicle* ptr = passedLog;
while (ptr->next)
ptr = ptr->next;
ptr->next = temp;
}
}
void passVehicle()
{
if (front==nullptr)
{
cout << "\nNo vehicles waiting at the signal." << endl;
return;
}
Vehicle* temp = front;
cout << "\nVehicle " << temp->number << " passed the signal." << endl;
logPassedVehicle(temp->number);
front = front->next;
if (front==nullptr)
rear = nullptr;
delete temp;
}
void displayQueue()
{
if (front==nullptr)
{
cout << "\n No vehicles in the queue." << endl;
return;
}
cout << "\n Vehicles at signal:" << endl;
Vehicle* temp = front;
while (temp!=nullptr)
{
cout << " -> " << temp->number << endl;
temp = temp->next;
}
}
void countQueue()
{
int count = 0;
Vehicle* temp = front;
while (temp)
{
count++;
temp = temp->next;
}
cout << "\nTotal vehicles waiting: " << count << endl;
}
void clearQueue()
{
while (front!=nullptr)
{
Vehicle* temp = front;
front = front->next;
delete temp;
}
rear = nullptr;
cout << "\n All vehicles cleared from the signal!" << endl;
}
void searchVehicle(const string& number)
{
Vehicle* temp = front;
while (temp!=nullptr)
{
if (temp->number == number)
{
cout << "\n Vehicle " << number << " is currently in the queue." << endl;
return;
}
temp = temp->next;
}
cout << "\n Vehicle " << number << " not found in queue." << endl;
}
void showFirstAndLast()
{
if (front==nullptr)
{
cout << "\nNo vehicles in the queue." << endl;
return;
}
cout << "\nFirst Vehicle: " << front->number << endl;
cout << "Last Vehicle: " << rear->number << endl;
}
void showPassedLog()
{
if (passedLog==nullptr)
{
cout << "\nNo vehicles have passed the signal yet." << endl;
return;
}
cout << "\nPassed Vehicles Log:" << endl;
Vehicle* temp = passedLog;
while (temp!=nullptr)
{
cout << " -> " << temp->number << endl;
temp = temp->next;
}
}
};
void menu()
{
TrafficQueue tq;
int choice;
string number;
do
{
cout << "\n========== Traffic Light Simulation ==========";
cout << "\n1. Vehicle Arrives";
cout << "\n2. Signal Turns Green (Vehicle Passes)";
cout << "\n3. Show Vehicles in Queue";
cout << "\n4. Count Waiting Vehicles";
cout << "\n5. Emergency Clear All Vehicles";
cout << "\n6. Search Vehicle by Number";
cout << "\n7. Show First and Last Vehicle";
cout << "\n8. Show Passed Vehicle Log";
cout << "\n9. Exit\n";
cout << "Choose an option: ";
cin >> choice;
cin.ignore();
switch (choice)
{
case 1:
cout << "Enter vehicle number: ";
getline(cin, number);
tq.arriveVehicle(number);
break;
case 2:
tq.passVehicle();
break;
case 3:
tq.displayQueue();
break;
case 4:
tq.countQueue();
break;
case 5:
tq.clearQueue();
break;
case 6:
if (tq.front==nullptr)
{
cout << "\nNo vehicles in the queue." << endl;
}
else
{
cout << "Enter vehicle number to search: ";
getline(cin, number);
tq.searchVehicle(number);
}
break;
case 7:
tq.showFirstAndLast();
break;
case 8:
tq.showPassedLog();
break;
case 9:
cout << "\n Exiting simulation. Goodbye!" << endl;
break;
default:
cout << "\n Invalid option. Try again." << endl;
}
} while (choice != 9);
}
int main()
{
menu();
return 0;
}
Tags: dsa c++dsa c++ practicaldsa c++ programdsa c++ projectdsa c++ traffic light simulation projecttraffic light simulationtraffic light simulation in dsa c++traffic light simulation projecttraffic light simulation using dsa c++
DataFlair Team
DataFlair Team provides high-impact content on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. We make complex concepts easy to grasp, helping learners of all levels succeed in their tech careers.