Все числа из заданного файла записать в линейный список - C (СИ)

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

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

Всем добрый день! Имеется текстовый файл с целыми числами. Требуется все числа из данного файла записать в линейный список. Но вот как это лучше осуществить? Как именно выбрать числа?

Решение задачи: «Все числа из заданного файла записать в линейный список»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <ctype.h>
  5. #include <conio.h>
  6. #include <math.h>
  7.  
  8. typedef struct ELEMENT
  9. {
  10.     int data;
  11.     struct ELEMENT *next;
  12. }ELEMENT;
  13. void CreateHead(ELEMENT **head, ELEMENT **last)
  14. {
  15.     *head=(ELEMENT *)malloc(sizeof(ELEMENT));
  16.     (*head)->next=NULL;
  17.     *last=*head;
  18. }
  19. void Print(ELEMENT *head)
  20. {
  21.     ELEMENT *q;
  22.     q=head->next;
  23.     while (q!=NULL)
  24.     {
  25.         printf ("%d ",q->data);
  26.         q=q->next;
  27.     }
  28.     printf("\n");
  29. }
  30. void AddElement(ELEMENT **last, int x)
  31. {
  32.     ELEMENT *q;
  33.     q=(ELEMENT *)malloc(sizeof(ELEMENT));
  34.     q->data=x;
  35.     q->next=NULL;
  36.     (*last)->next=q;
  37.     *last=q;
  38. }
  39. /* ÏðîâåðêГ*, ÿâëÿåòñÿ ëè ÷èñëî ïîëîæèòåëüГ*ûì */
  40. int Q (int a)
  41. {
  42.     return (a>0);
  43. }
  44. /* ÏðîâåðêГ*, Г*Г*Г·ГЁГ*Г*ГҐГІГ±Гї ëè ÷èñëî Г± 1 */
  45. int T (int a)
  46. {
  47.     int b=abs(a);
  48.     while(b>9)
  49.      b/=10;
  50.      return (b==1);
  51. }
  52. void DeleteElement(ELEMENT *head, ELEMENT **last,int x)
  53. {
  54.     ELEMENT *q, *t;
  55.     q=head;
  56.     while (q->next!=NULL)
  57.     {
  58.         if (T(q->next->data))
  59.         {
  60.             t=q->next;
  61.             q->next=q->next->next;
  62.             free (t);
  63.         }
  64.         else q=q->next;
  65.     }
  66.     *last=q;
  67. }
  68. void Count(ELEMENT *head, ELEMENT **last,int x)
  69. {
  70.     ELEMENT *q, *t;
  71.     q=head;
  72.     int count=0;
  73.     while (q->next!=NULL)
  74.     {
  75.         if (Q(q->next->data))
  76.         {
  77.             count++;
  78.         }
  79.         else q=q->next;
  80.     }
  81.     *last=q;
  82. }
  83. int CreateFile(int a,char *fileName)
  84. {
  85.    
  86.     FILE *f;
  87.     if ((f=fopen(fileName,"r"))==NULL)
  88.       return 1;
  89.     ELEMENT *head, *last;
  90.    
  91.     CreateHead(&head,&last);
  92.     fscanf(f,"%d",a);
  93.     while (a!=0)
  94.     {
  95.         AddElement(&last,a);
  96.         fscanf(f,"%d",a);  
  97.     }
  98.     return a;
  99. }
  100. int main()
  101. {  
  102.     char *fileName="e:\\inf\\9.txt";
  103.     ELEMENT *head, *last;
  104.     int a,count;
  105.     CreateFile (a,fileName);
  106.     Print(head);
  107.     DeleteElement(head,&last,a);
  108.     Print(head);
  109.     count=Count(head,&last,count);
  110.     printf("Kol_vo= ",count);  
  111.     return 0;
  112. }

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

  1. В начале кода определяются необходимые функции и переменные
  2. Затем определяется структура данных ELEMENT для работы с линейным списком
  3. Создаются функции для работы со списком: CreateHead, Print, AddElement, DeleteElement, Count
  4. Определяются функции Q и T для проверки чисел на положительность и одиночность цифры
  5. В функции main создается файл для чтения чисел, создается пустой список, числа из файла добавляются в список
  6. Затем список выводится на экран, после чего происходит удаление чисел из списка и подсчет оставшихся элементов
  7. В конце программы выводится количество оставшихся элементов списка

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


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

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

7   голосов , оценка 4.143 из 5

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

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

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