Насколько я понимаю, вы собираете несколько значений в списке и хотите выполнить вычисления с ними.Читателю вашего исходного кода трудно понять, что означают отдельные значения, распределенные по нескольким спискам.
Так как насчет использования структуры, содержащей набор значений?
Так что это может выглядетьнапример:
typedef struct {
int process_id;
int priority;
int computing_time;
int turn_around_time;
} element;
У нас есть один список со всеми этими значениями, мы можем назвать его, например, process_values, и инициализировать его с помощью init, как показано в вашем коде:
DListNode *process_values = calloc(1, sizeof(DListNode));
init(process_values);
мы могли бы заполнить некоторые записи, например, так:
element entry;
entry.process_id = 2;
entry.priority = 12;
entry.computing_time = 10;
entry.turn_around_time = 40;
dinsert(process_values, entry);
entry.process_id = 1;
entry.priority = 12;
entry.computing_time = 25;
entry.turn_around_time = 80;
dinsert(process_values, entry);
Ну, я думаю, теперь самое интересное для вас.Как связать код со списками с кодом расчета?Вот очень простой пример: если мы хотим вычислить среднее время вычислений, мы могли бы сделать что-то вроде этого:
DListNode* p;
float sum = 0;
int cnt = 0;
for (p = process_values->rlink; p != process_values; p = p->rlink) {
sum += p->data.computing_time;
cnt++;
}
float avg = sum / cnt;
printf("average computing time %f\n", avg);
Вывод на консоли будет для числа выше:
average computing time 17.500000
Утечка памяти
Вы также должны знать, что вам необходимо освободить каждый узел связанного списка ровно один раз.В настоящее время вы просто освобождаете память для головного узла.И вы должны сделать это после того, как вы закончили использовать значения в связанном списке.