03 134241 017 132709114925 24032025 082035pm
03 134241 017 132709114925 24032025 082035pm
Tools Required
● PC with Windows 7 Professional
● Visual Studio 2010
prev_node would contain a pointer to the address of the previous node and next_node would
point the next node in the list. Hence, we can move in both the directions.
Traversing
Traversal of a doubly linked list is similar to that of a singly linked list. We have to first check for a
condition: whether the linked list is empty or not. This helps to set the start pointer at a proper location.
After that we access each node till end.
Insertion
A new node can be inserted very easily in a doubly linked list. We just need to set the pointers
prev_node and next_node carefully interlinking the prev_node and the next_node node with
the appropriate pointers.
If you are inserting a Node n2 between Node n1 and n3, you should set the pointer prev_node of n2
to n1 and pointer next_node of n2 to n3.
struct node
{
struct node *prev_node;
int info;
struct node *next_node;
};
//Main Body
int main()
{
int option, data_element, item_pos;
struct node *begin=NULL;
while(1)
{
cout<<"\n1.Create A New Doubly Linked List\n";
cout<<"2.Display the Doubly Linked List\n";
cout<<"3.Add to an Empty Doubly Linked List\n";
cout<<"4.Add at Starting of the Doubly Linked List\n";
cout<<"5.Add at Ending\n";
cout<<"6.Add After a Node\n";
cout<<"7.Add Before a Node\n";
cout<<"8.Delete a Node\n";
cout<<"9.Reverse the Doubly Linked List\n";
cout<<"10.Exit\n";
cout<<"Enter your option : ";
cin>>option;
switch(option)
{
case 1:
begin=create_list(begin);
break;
case 2:
display(begin);
break;
case 3:
cout<<"Enter the element:";
cin>>data_element;
begin=addtoemptylist(begin,data_element);
break;
case 4:
cout<<"Enter the element:";
cin>>data_element;
begin=addatbeglist(begin,data_element);
break;
case 5:
cout<<"Enter the element:";
cin>>data_element;
begin=addatendlist(begin,data_element);
break;
case 6:
cout<<"Enter the element:";
cin>>data_element;
cout<<"Enter the element after which to insert : ";
cin>>item_pos;
begin=addafterlist(begin,data_element,item_pos);
break;
case 7:
cout<<"Enter the element: ";
cin>>data_element;
cout<<"Enter the element before which to insert : ";
cin>>item_pos;
begin=addbeforelist(begin,data_element,item_pos);
break;
case 8:
cout<<"Enter the element to be Deleted : ";
cin>>data_element;
begin=deletenode(begin,data_element);
break;
case 9:
begin=reverselist(begin);
break;
case 10:
exit(1);
default:
cout<<"Wrong option\n";
}
}
return 0;
}
for(i=2;i<=n;i++)
{
cout<<"Enter the element to be inserted : ";
cin>>data_element;
begin=addatendlist(begin,data_element);
}
return begin;
}
if(begin->info==data_element)
{
temp=begin;
begin=begin->next_node;
begin->prev_node=NULL;
delete(temp);
return begin;
}
temp=begin->next_node;
while(temp->next_node!=NULL )
{
if(temp->info==data_element)
{
temp->prev_node->next_node=temp->next_node;
temp->next_node->prev_node=temp->prev_node;
delete(temp);
return begin;
}
temp=temp->next_node;
}
if(temp->info==data_element)
{
temp->prev_node->next_node=NULL;
delete(temp);
return begin;
}
cout<<"Element "<<data_element<<" not found\n";
return begin;
}
TASKS
Task #.1: Estimated Time: 75 Mins.
Write a simple airline ticket reservation system program. The program should display a menu with
following options: Reserve a ticket, cancel a reservation, check whether a ticket is reserved for a
particular person and display the passengers. The information is maintained alphabetized link list of
names. In a simpler version of the program, assume that tickets are reserved for only one flight. In a
fuller version, place no limit on the number of flights. Create a link list of flights with each node including
a pointer to a link list of passengers.
#include <iostream>
using namespace std;
struct Passenger
{
string name;
Passenger *prev;
Passenger *next;
Passenger(string n)
{
name = n;
prev = next = nullptr;
}
};
struct Flight
{
int flightNumber;
Passenger *passengerHead;
Flight *next;
Flight(int num)
{
flightNumber = num;
passengerHead = nullptr;
next = nullptr;
}
};
class Ticket
{
private:
Flight *flighthead;
public:
Ticket()
{
flighthead = NULL;
}
newpassenger->next = curr;
newpassenger->prev = prev;
if (prev != NULL)
prev->next = newpassenger;
else
flight->passengerHead = newpassenger;
if (curr != nullptr)
curr->prev = newpassenger;
cout << "Ticket reserved for " << name << " on Flight " << num << "." <<
endl;
}
if (curr->prev == NULL)
{
flight->passengerHead = curr->next;
}
else
curr->prev->next = curr->next;
if (curr->next != nullptr)
curr->next->prev = curr->prev;
delete curr;
cout << "Reservation cancelled successfully for " << name << "!" << endl;
}
void display()
{
temp = temp->next;
}
}
};
int main()
{
int choice;
int flightNumber;
string name;
Ticket F1;
while (true)
{
cout << "\nMenu:" << endl;
cout << "1. Add Flight" << endl;
cout << "2. Reserve Ticket" << endl;
cout << "3. Cancel Reservation" << endl;
cout << "4. Check Reservation" << endl;
cout << "5. Display Passengers" << endl;
cout << "6. Exit" << endl;
cout << "Enter your choice: ";
cin >> choice;
cin.ignore();
switch (choice)
{
case 1:
cout << "Enter flight number: ";
cin >> flightNumber;
F1.addflight(flightNumber);
break;
case 2:
cout << "Enter flight number: ";
cin >> flightNumber;
cin.ignore();
cout << "Enter passenger name: ";
getline(cin, name);
F1.reserveticket(flightNumber, name);
break;
case 3:
cout << "Enter flight number: ";
cin >> flightNumber;
cin.ignore();
cout << "Enter passenger name to cancel: ";
getline(cin, name);
F1.cancelreservation(flightNumber, name);
break;
case 4:
cout << "Enter flight number: ";
cin >> flightNumber;
cin.ignore();
cout << "Enter passenger name to check: ";
getline(cin, name);
F1.checkreservation(flightNumber, name);
break;
case 5:
F1.display();
break;
case 6:
cout << "Exiting program!!!" << endl;
return 0;
default:
cout << "Invalid Entry" << endl;
break;
}
}
return 0;
}