Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions DIRECTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -560,6 +560,7 @@
* [LongestNonRepetitiveSubstring](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/LongestNonRepetitiveSubstring.java)
* [LongestPalindromicSubstring](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/LongestPalindromicSubstring.java)
* [Lower](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Lower.java)
* [Manacher](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Manacher.java)
* [MyAtoi](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/MyAtoi.java)
* [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Palindrome.java)
* [Pangram](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Pangram.java)
Expand Down Expand Up @@ -846,6 +847,8 @@
* [TwinPrimeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/TwinPrimeTest.java)
* [VolumeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/VolumeTest.java)
* misc
* [ColorContrastRatioTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/ColorContrastRatioTest.java)
* [InverseOfMatrixTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/InverseOfMatrixTest.java)
* [MapReduceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/MapReduceTest.java)
* [MedianOfMatrixtest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/MedianOfMatrixtest.java)
* [MedianOfRunningArrayTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/MedianOfRunningArrayTest.java)
Expand All @@ -857,6 +860,7 @@
* [ArrayRightRotation](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/ArrayRightRotation.java)
* [ArrayRightRotationTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/ArrayRightRotationTest.java)
* [BestFitCPUTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/BestFitCPUTest.java)
* [BFPRTTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/BFPRTTest.java)
* [BoyerMooreTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/BoyerMooreTest.java)
* cn
* [HammingDistanceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/cn/HammingDistanceTest.java)
Expand Down Expand Up @@ -976,6 +980,7 @@
* [LongestNonRepetitiveSubstringTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LongestNonRepetitiveSubstringTest.java)
* [LongestPalindromicSubstringTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LongestPalindromicSubstringTest.java)
* [LowerTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LowerTest.java)
* [ManacherTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/ManacherTest.java)
* [MyAtoiTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/MyAtoiTest.java)
* [PalindromeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/PalindromeTest.java)
* [PangramTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/PangramTest.java)
Expand Down
51 changes: 42 additions & 9 deletions src/main/java/com/thealgorithms/scheduling/FCFSScheduling.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,43 +4,76 @@
import java.util.List;

/**
* Non-pre-emptive First Come First Serve scheduling. This can be understood here -
* https://www.scaler.com/topics/first-come-first-serve/
* Non-preemptive First Come First Serve (FCFS)
* scheduling algorithm.
* In FCFS scheduling, processes are executed in the order they arrive in the
* ready queue.
* The first process that arrives gets executed first, followed by the next
* process, and so on.
*/
public class FCFSScheduling {

private List<ProcessDetails> processes;
// Attributes
private List<ProcessDetails> processes; // List of processes to be scheduled

/**
* Constructor to initialize the FCFSScheduling class with a list of processes.
*
* @param processes a list of ProcessDetails representing the processes to be
* scheduled
*/
FCFSScheduling(final List<ProcessDetails> processes) {
this.processes = processes;
}

/**
* Schedules the processes using FCFS algorithm by evaluating the waiting time
* and turnaround time for each process.
*/
public void scheduleProcesses() {
evaluateWaitingTime();
evaluateTurnAroundTime();
evaluateWaitingTime(); // Calculate waiting time for each process
evaluateTurnAroundTime(); // Calculate turnaround time for each process
}

/**
* Evaluates the waiting time for each process in the list.
* The waiting time for the first process is set to 0, and each subsequent
* process's waiting time is calculated based on the
* burst time of the previous processes.
*/
private void evaluateWaitingTime() {
int processesNumber = processes.size();
int processesNumber = processes.size(); // Get the no. of processes

if (processesNumber == 0) {
return;
return; // no processes to schedule
}

int waitingTime = 0;
int burstTime = processes.get(0).getBurstTime();
int burstTime = processes.get(0).getBurstTime(); // Burst time of the 1st process

processes.get(0).setWaitingTime(waitingTime); // for the first process, waiting time will be 0.
// Set the waiting time for the 1st process to 0
processes.get(0).setWaitingTime(waitingTime);

// Calculate waiting time for each process starting from the second
for (int i = 1; i < processesNumber; i++) {
// Waiting time for the current process = waiting time of the previous
// process plus its burst time
processes.get(i).setWaitingTime(waitingTime + burstTime);

// Update the waiting time and burst time for the next process
waitingTime = processes.get(i).getWaitingTime();
burstTime = processes.get(i).getBurstTime();
}
}

/**
* Evaluates the turnaround time for each process in the list.
* Turnaround time is calculated as the sum of the burst time and the waiting
* time for each process.
*/
private void evaluateTurnAroundTime() {
for (final var process : processes) {
// Calculate the turnaround time for the current process
process.setTurnAroundTimeTime(process.getBurstTime() + process.getWaitingTime());
}
}
Expand Down