In C++, use stacks, queues, and new datastructures to complete this problem. The data structures for thisassignment are an array and a circular linked list. Problem Statement: Have you been to a popular restaurant recently? Many are usingcell phones to notify groups when their table is ready. But, whynot an App? It could let groups know their place in line and be asales tool for the restaurant to forward coupons and otherpromotions to increase business. Let’s say you had a friend opening up a new restaurant businessand they are looking for help with the software support. They haveasked you to be part of the project. You have decided that a queuewould be a great ADT for keeping track of who is in line, and howlong it will take before they get a table. You have also decidedthat a stack would be great for reaching out to the customers whomost recently frequented the restaurant to provide promotionalmaterials so that they will return before forgetting about thisgreat new restaurant. Programming: There are two ADTs in this program(Queue and Stack ADT). The queue will represent the people in line waiting for atable. The queue is ordered based on the order in which the groupsarrive. The data should include (a) name of the group, (b) number of people in the group (c) if there is anyone who needs special seating If so, include the information about any requirements (e.g.,wheel chair or high chair). (e) if the group would like to receive coupons and otherpromotional materials If so, include the contact name (full name) and emailaddress The stack then will represent people interested in receivingpromotional material, which should include their full name andemail address Please keep in mind that because we are creating ADTs, theuser of the program must not be aware that stacksand queues are being used. You should support completeimplementations of the Stack and Queue ADT. Make sure to thoroughlytest each of the stack and queue functions! Programming – Data Structures: The queue should be implemented using a circular linked list ofpeople, where the rear pointer points to the most recent group toarrive at the restaurant, and rear->next points to the firstgroup to arrive that hasn’t yet been seated. You must implementenqueue, dequeue, peek, and display. Enqueue would be used whenpeople arrive. Dequeue would be used when groups get seated.Display should include the number in line, so people will know howlong of a wait they have. The stack should be implemented using an array, where eachelement in the array is a person interested in promotionalmaterials. The array must be dynamically allocated. Have theconstructor receive the size of the array from the client program.Stack ADT functions should include push, pop, peek, and display.When a group gets seated at a table, it is time to push theirinformation onto the stack if they are interested in promotionalmaterials. Then, when the manager will contact those people using pop whenthere are a few new promotional events (e.g., a pumpkin carvingparty). As you know, using a stack will allow the manager tocontact the most recent people who have frequented the restaurant.The manager doesn’t want to entirely lose this information, so theywould like it saved in an external data file after being removedfrom the stack. Things you should know…as part of yourprogram: Do not use statically allocated arrays in your classesor structures used by the ADT. All data members in a class must be private Never perform input operations from your data structureclass. Global variables are not allowed. Do not use the String class! (use arrays of charactersinstead!) You may use the cstring library. Use modular design, separating the .h files from the .cpp files.Remember, .h files should contain the class header and anynecessary prototypes. The .cpp files should contain functiondefinitions. Never “#include” .cpp files!