For the following questions, you will implement the data structure to store information used by a local car dealer. Each car has some information and stored in a text files called cars: Write a main program for all questions to let the user enter, delete, search for information, and print current cars stored in the data structure. Cars formatted so car records separated by a blank line. Each record contains (in order, each in a single line): Make (manufacturer). Model, Year, Mileage, Price. Implement a double linked-list to store cars data. Write a double linked-list class including search, delete, append (to the head and tail), and remove (from the head and tail). Implement a FIFO queue of car data using the double linked-list. You can use the double linked list you wrote in Q1. Implement a max-heap of cars data that can extract the car with the highest price. Write a max-heap class including heapify, build heap, extract, and insertion. Implement a binary search tree of car data. Write a BST class including search, insertion, and deletion. Solution Cars.java package pacages; public class Cars { String make; String model; int year; double mileage; double price; // Setters and getters for the Cars member variables public String getMake() { return make; } public void setMake(String make) { this.make = make; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public double getMileage() { return mileage; } public void setMileage(double mileage) { this.mileage = mileage; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String toString() { return \"Make: \"+getMake()+ \" Model: \"+getModel()+ \" Year: \"+getYear() + \" Mileage: \"+getMileage() + \" Price: \"+getPrice(); } } DoublyLinkedList.java package pacages; class Node { protected Cars data; protected Node next, prev; /* Constructor */ public Node() { next = null; prev = null; data = null; } /* Constructor */ public Node(Cars d, Node n, Node p) { data = d; next = n; prev = p; } /* Function to set link to next node */ public void setLinkNext(Node n) { next = n; } /* Function to set link to previous node */ public void setLinkPrev(Node p) { prev = p; } /* Funtion to get link to next node */ public Node getLinkNext() { return next; } /* Function to get link to previous node */ public Node getLinkPrev() { return prev; } /* Function to set data to node */ public void setData(Cars d) { data = d; } /* Function to get data from node */ public Cars getData() { return data; } } /* Class linkedList */ public class DoublyLinkedList { protected Node start; protected Node end ; public int size; /* Constructor */ public DoublyLinkedList() { start = null; end = null; size = 0; } /* Function to check if list is empty */ public boolean isEmpty() { return start == null; } /* Function to get size of list */ public.