Все числа из заданного файла записать в линейный список - C (СИ)
Формулировка задачи:
Всем добрый день! Имеется текстовый файл с целыми числами. Требуется все числа из данного файла записать в линейный список. Но вот как это лучше осуществить? Как именно выбрать числа?
Решение задачи: «Все числа из заданного файла записать в линейный список»
textual
Листинг программы
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <ctype.h>
- #include <conio.h>
- #include <math.h>
- typedef struct ELEMENT
- {
- int data;
- struct ELEMENT *next;
- }ELEMENT;
- void CreateHead(ELEMENT **head, ELEMENT **last)
- {
- *head=(ELEMENT *)malloc(sizeof(ELEMENT));
- (*head)->next=NULL;
- *last=*head;
- }
- void Print(ELEMENT *head)
- {
- ELEMENT *q;
- q=head->next;
- while (q!=NULL)
- {
- printf ("%d ",q->data);
- q=q->next;
- }
- printf("\n");
- }
- void AddElement(ELEMENT **last, int x)
- {
- ELEMENT *q;
- q=(ELEMENT *)malloc(sizeof(ELEMENT));
- q->data=x;
- q->next=NULL;
- (*last)->next=q;
- *last=q;
- }
- /* ÏðîâåðêГ*, ÿâëÿåòñÿ ëè ÷èñëî ïîëîæèòåëüГ*ûì */
- int Q (int a)
- {
- return (a>0);
- }
- /* ÏðîâåðêГ*, Г*Г*Г·ГЁГ*Г*ГҐГІГ±Гї ëè ÷èñëî Г± 1 */
- int T (int a)
- {
- int b=abs(a);
- while(b>9)
- b/=10;
- return (b==1);
- }
- void DeleteElement(ELEMENT *head, ELEMENT **last,int x)
- {
- ELEMENT *q, *t;
- q=head;
- while (q->next!=NULL)
- {
- if (T(q->next->data))
- {
- t=q->next;
- q->next=q->next->next;
- free (t);
- }
- else q=q->next;
- }
- *last=q;
- }
- void Count(ELEMENT *head, ELEMENT **last,int x)
- {
- ELEMENT *q, *t;
- q=head;
- int count=0;
- while (q->next!=NULL)
- {
- if (Q(q->next->data))
- {
- count++;
- }
- else q=q->next;
- }
- *last=q;
- }
- int CreateFile(int a,char *fileName)
- {
- FILE *f;
- if ((f=fopen(fileName,"r"))==NULL)
- return 1;
- ELEMENT *head, *last;
- CreateHead(&head,&last);
- fscanf(f,"%d",a);
- while (a!=0)
- {
- AddElement(&last,a);
- fscanf(f,"%d",a);
- }
- return a;
- }
- int main()
- {
- char *fileName="e:\\inf\\9.txt";
- ELEMENT *head, *last;
- int a,count;
- CreateFile (a,fileName);
- Print(head);
- DeleteElement(head,&last,a);
- Print(head);
- count=Count(head,&last,count);
- printf("Kol_vo= ",count);
- return 0;
- }
Объяснение кода листинга программы
- В начале кода определяются необходимые функции и переменные
- Затем определяется структура данных ELEMENT для работы с линейным списком
- Создаются функции для работы со списком: CreateHead, Print, AddElement, DeleteElement, Count
- Определяются функции Q и T для проверки чисел на положительность и одиночность цифры
- В функции main создается файл для чтения чисел, создается пустой список, числа из файла добавляются в список
- Затем список выводится на экран, после чего происходит удаление чисел из списка и подсчет оставшихся элементов
- В конце программы выводится количество оставшихся элементов списка
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д