Все числа из заданного файла записать в линейный список - 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 создается файл для чтения чисел, создается пустой список, числа из файла добавляются в список
- Затем список выводится на экран, после чего происходит удаление чисел из списка и подсчет оставшихся элементов
- В конце программы выводится количество оставшихся элементов списка