Сделать на базе структуры линейный список С - C (СИ)
Формулировка задачи:
Приветствую! Начинающий программист, поставлена задача и имеется ее решение в виде простой структуры:
Выполнить задание с использованием динамической структуры данных
типа
линейный список
. В файле содержится следующая информация (список) о студентах: -Ф.И.О.; -год рождения; -оценки на экзаменах по 4 предметам. ------------------------------------- ИВАНОВ А.И. 1972 5 4 3 3 СИДОРОВ И.А. 1976 5 5 5 5 И тд. Составить программу, которая должна выполнять считывание информации о студентах, выборку и обработку информации, запись обработанной информации в файл вывода. Информация должна содержать количество и список студентов, имеющих: Средний балл не ниже 4,5 и год рождения не старше 1975. Имеется код решения этой задачи с использованием структуры и массива. Помогите, пожалуйста, сделать линейный список из этого! Я с указателями и списками совсем запутался, ничего не получается.#include "stdafx.h" #include <stdio.h> #include <conio.h> #include <math.h> int main() { struct LIST { char fio[11]; char Ns[5]; unsigned year; int ocn[4]; float sr; }; LIST Student[30]; float socen = 4.5; int i = 0, j, N, k = 0; FILE*f_in, *f_out; f_in = fopen("in.txt", "r"); f_out = fopen("out.txt", "w"); for (i = 0; i < 10; i++) { fscanf(f_in, "%s %s %i %i %i %i %i\n", &Student[i].fio, &Student[i].Ns, &Student[i].year, &Student[i].ocn[1], &Student[i].ocn[2], &Student[i].ocn[3], &Student[i].ocn[4]); } for (i = 0; i < 10; i++) { fprintf(f_out, "%s %s %i %i %i %i %i\n", Student[i].fio, Student[i].Ns, Student[i].year, Student[i].ocn[1], Student[i].ocn[2], Student[i].ocn[3], Student[i].ocn[4]); } N = 10; for (j = 0; j < N; j++) { Student[j].sr = float(Student[j].ocn[1] + Student[j].ocn[2] + Student[j].ocn[3] + Student[j].ocn[4]) / 4; } fprintf(f_out, "Список студентов средний балл которых не ниже"); fprintf(f_out, "%6.2f\n", socen); fprintf(f_out, "и год рождения не старше 1975 "); for (j = 0; j<N; j++) { if ((Student[j].sr >= socen) && (Student[j].year >= 1975)) { k += 1; fprintf(f_out, "\n Студент %s %s %i года рождения имеет средний балл %5.2f", Student[j].fio, Student[j].Ns, Student[j].year, Student[j].sr); } } fprintf(f_out, "\n Всего таких студентов в списке - %i", k); getch(); return 0; }
Помогите, пожалуйста, товарищи!!! Мозги кипят, я не понимаю как сделать список!!! Помогите, не бросайте, сил уже нет, 3 недели бьюсь. Хотя бы какую-то структуру кода напишите что б я дописал сам! Намекните, что делать.
Решение задачи: «Сделать на базе структуры линейный список С»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> typedef struct list { int data; struct list *next; } List; void Insert(List **head, const int x) { List *cur = *head; if (*head) Insert(&(*head)->next, x); else { *head = malloc(sizeof(List)); (*head)->data = x; (*head)->next = cur; } } void Print(const List *head) { while (head) { printf("%d\n", head->data); head = head->next; } } void Free(List *head) { if (head) Free(head->next); free(head); } int main(void) { List *head = NULL; Insert(&head, 2); Insert(&head, 4); Insert(&head, 3); Insert(&head, 1); Insert(&head, 5); Print(head); Free(head); return 0; }
Объяснение кода листинга программы
В данном коде реализован линейный список, а точнее его часть - добавление элемента в начало списка и вывод списка на экран. Код выделяет память под новый элемент в куче, заполняет его данными и добавляет в начало списка. После чего выводит список на экран. В конце списка освобождается, начиная с первого элемента.
- Типизация структуры списка: структура
list
определена внутри файла и имеет два поля: data (тип int) и next (тип List*) - Создание пустого списка: переменная head инициализируется как NULL (указатель на пустую память)
- Вставка элемента в начало списка: функция Insert вызывается с указателем на голову списка и значением нового элемента
- Печать списка: функция Print вызывается с указателем на голову списка и выводит значение поля data каждого элемента списка
- Освобождение памяти: функция Free вызывается с указателем на голову списка и освобождает память, начиная с первого элемента списка (включая все его потомки)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д