Implement the following scheduling algorithms in either C, C++, or Python:
1. FCFS
2. SJF (non-preemptive)
3. SJF (preemptive)
4. Priority (non-preemptive)
5. Priority (preemptive)
6. Round Robin (with time quantum from the user)
The user will input the number of processes, arrival time, burst time, and time quantum for Round Robin. Additionally, the user can specify which scheduling algorithm to use. If no algorithm is specified, the code will display the results for all algorithms.
The output will include the Gantt chart, average waiting time, and average turnaround time for each algorithm.