diff --git a/cv6/a_station.c b/cv6/a_station.c index 8f659d6..4086faa 100644 --- a/cv6/a_station.c +++ b/cv6/a_station.c @@ -10,24 +10,84 @@ struct station* create_station(){ } void destroy_station(struct station* station){ + if (!station) return; + + for (int i = 0; i < station->track_count; ++i) { + struct car* current = station->tracks[i]; + while (current) { + struct car* temp = current; + current = current->next; + free(temp); + } + } + free(station->tracks); + free(station); } int select_track(struct station* station, const char* target){ - return 0; + int sum = 0; + while (*target) { + sum += *target++; + } + return sum % station->track_count; } void add_target_capacity(struct station* station,const char* target, int capacity){ + int index = select_track(station, target); + struct car* current = station->tracks[index]; + + while (current) { + if (strcmp(current->value, target) == 0) { + current->capacity += capacity; + return; + } + current = current->next; + } + + struct car* new_car = (struct car*)malloc(sizeof(struct car)); + if (!new_car) return; + + strncpy(new_car->value, target, TARGET_SIZE - 1); + new_car->value[TARGET_SIZE - 1] = '\0'; // Ensure null termination + new_car->capacity = capacity; + new_car->next = station->tracks[index]; + station->tracks[index] = new_car; } int get_target_capacity(struct station* station,const char* target){ + int index = select_track(station, target); + struct car* current = station->tracks[index]; + + while (current) { + if (strcmp(current->value, target) == 0) { + return current->capacity; + } + current = current->next; + } return 0; } int count_targets(struct station* station){ - return 0; + int count = 0; + for (int i = 0; i < station->track_count; ++i) { + struct car* current = station->tracks[i]; + while (current) { + ++count; + current = current->next; + } + } + return count; } int count_capacity(struct station* station){ - return 0; + int total_capacity = 0; + for (int i = 0; i < station->track_count; ++i) { + struct car* current = station->tracks[i]; + while (current) { + total_capacity += current->capacity; + current = current->next; + } + } + return total_capacity; } diff --git a/cv6/a_station.o b/cv6/a_station.o new file mode 100644 index 0000000..eb74371 Binary files /dev/null and b/cv6/a_station.o differ diff --git a/cv6/main.o b/cv6/main.o new file mode 100644 index 0000000..6a028e7 Binary files /dev/null and b/cv6/main.o differ diff --git a/cv6/station b/cv6/station new file mode 100755 index 0000000..287c597 Binary files /dev/null and b/cv6/station differ diff --git a/cv6/temp.c b/cv6/temp.c deleted file mode 100644 index a8f9fd8..0000000 --- a/cv6/temp.c +++ /dev/null @@ -1 +0,0 @@ -Hello