Сделать на базе структуры линейный список С - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Приветствую! Начинающий программист, поставлена задача и имеется ее решение в виде простой структуры: Выполнить задание с использованием динамической структуры данных типа

линейный список

. В файле содержится следующая информация (список) о студентах: -Ф.И.О.; -год рождения; -оценки на экзаменах по 4 предметам. ------------------------------------- ИВАНОВ А.И. 1972 5 4 3 3 СИДОРОВ И.А. 1976 5 5 5 5 И тд. Составить программу, которая должна выполнять считывание информации о студентах, выборку и обработку информации, запись обработанной информации в файл вывода. Информация должна содержать количество и список студентов, имеющих: Средний балл не ниже 4,5 и год рождения не старше 1975. Имеется код решения этой задачи с использованием структуры и массива. Помогите, пожалуйста, сделать линейный список из этого! Я с указателями и списками совсем запутался, ничего не получается.
Листинг программы
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <math.h>
  5. int main()
  6. {
  7. struct LIST {
  8. char fio[11];
  9. char Ns[5];
  10. unsigned year;
  11. int ocn[4];
  12. float sr;
  13. };
  14. LIST Student[30];
  15. float socen = 4.5;
  16. int i = 0, j, N, k = 0;
  17. FILE*f_in, *f_out;
  18. f_in = fopen("in.txt", "r");
  19. f_out = fopen("out.txt", "w");
  20. for (i = 0; i < 10; i++)
  21. {
  22. fscanf(f_in, "%s %s %i %i %i %i %i\n",
  23. &Student[i].fio,
  24. &Student[i].Ns,
  25. &Student[i].year,
  26. &Student[i].ocn[1],
  27. &Student[i].ocn[2],
  28. &Student[i].ocn[3],
  29. &Student[i].ocn[4]);
  30. }
  31. for (i = 0; i < 10; i++)
  32. {
  33. fprintf(f_out, "%s %s %i %i %i %i %i\n",
  34. Student[i].fio,
  35. Student[i].Ns,
  36. Student[i].year,
  37. Student[i].ocn[1],
  38. Student[i].ocn[2],
  39. Student[i].ocn[3],
  40. Student[i].ocn[4]);
  41. }
  42. N = 10;
  43. for (j = 0; j < N; j++)
  44. {
  45. Student[j].sr = float(Student[j].ocn[1] + Student[j].ocn[2] + Student[j].ocn[3] + Student[j].ocn[4]) / 4;
  46. }
  47. fprintf(f_out, "Список студентов средний балл которых не ниже");
  48. fprintf(f_out, "%6.2f\n", socen);
  49. fprintf(f_out, "и год рождения не старше 1975 ");
  50. for (j = 0; j<N; j++) {
  51. if ((Student[j].sr >= socen) && (Student[j].year >= 1975))
  52. { k += 1;
  53. fprintf(f_out, "\n Студент %s %s %i года рождения имеет средний балл %5.2f", Student[j].fio, Student[j].Ns, Student[j].year, Student[j].sr);
  54. }
  55. }
  56. fprintf(f_out, "\n Всего таких студентов в списке - %i", k);
  57. getch();
  58. return 0;
  59. }
Помогите, пожалуйста, товарищи!!! Мозги кипят, я не понимаю как сделать список!!! Помогите, не бросайте, сил уже нет, 3 недели бьюсь. Хотя бы какую-то структуру кода напишите что б я дописал сам! Намекните, что делать.

Решение задачи: «Сделать на базе структуры линейный список С»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct list
  5. {
  6.     int data;
  7.     struct list *next;
  8. } List;
  9.  
  10.  
  11. void Insert(List **head, const int x)
  12. {
  13.     List *cur = *head;
  14.     if (*head)
  15.         Insert(&(*head)->next, x);
  16.     else
  17.     {
  18.         *head = malloc(sizeof(List));
  19.         (*head)->data = x;
  20.         (*head)->next = cur;
  21.     }
  22. }
  23.  
  24. void Print(const List *head)
  25. {
  26.     while (head)
  27.     {
  28.         printf("%d\n", head->data);
  29.         head = head->next;
  30.     }
  31. }
  32.  
  33. void Free(List *head)
  34. {
  35.     if (head)
  36.         Free(head->next);
  37.     free(head);
  38. }
  39.  
  40. int main(void)
  41. {
  42.     List *head = NULL;
  43.     Insert(&head, 2);
  44.     Insert(&head, 4);
  45.     Insert(&head, 3);
  46.     Insert(&head, 1);
  47.     Insert(&head, 5);
  48.     Print(head);
  49.     Free(head);
  50.     return 0;
  51. }

Объяснение кода листинга программы

В данном коде реализован линейный список, а точнее его часть - добавление элемента в начало списка и вывод списка на экран. Код выделяет память под новый элемент в куче, заполняет его данными и добавляет в начало списка. После чего выводит список на экран. В конце списка освобождается, начиная с первого элемента.

  1. Типизация структуры списка: структура list определена внутри файла и имеет два поля: data (тип int) и next (тип List*)
  2. Создание пустого списка: переменная head инициализируется как NULL (указатель на пустую память)
  3. Вставка элемента в начало списка: функция Insert вызывается с указателем на голову списка и значением нового элемента
  4. Печать списка: функция Print вызывается с указателем на голову списка и выводит значение поля data каждого элемента списка
  5. Освобождение памяти: функция Free вызывается с указателем на голову списка и освобождает память, начиная с первого элемента списка (включая все его потомки)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.455 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы