Все числа из заданного файла записать в линейный список - 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;
}

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

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

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


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

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

7   голосов , оценка 4.143 из 5
Похожие ответы