Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2011, 21:29   #1
JolaGas
Новичок
Джуниор
 
Регистрация: 25.05.2011
Сообщений: 2
По умолчанию Сортировка линейного списка

Здравствуйте, поставлена задача считать слова из файла и отсортировать их по списку. Вот написанный мною код, но слова не сортируются. Посмотрите, что не так. Спасибо!

#include "stdafx.h"
#include <string.h>
#include <conio.h>
#include <stdio.h>


typedef struct Elem
{
char name[20];// элемент БД
};

typedef struct ListElem
{
Elem el;
ListElem *next;// указатель на следующий эл-т
};
ListElem *list_head; // голова списка

// добавление эл-та в список
void add_elem(ListElem* el)
{
// записываем эл-т в голову и
if (list_head==NULL) list_head = el;
else // если необходимо указываем ему следующий элемент (предыдущую голову)
{
ListElem *temp = list_head;
list_head = el;
list_head->next = temp;
}
}

// вывод на экран элемента БД
void print(Elem *elem)
{
// выводим его поля
for(int i=0;i<20;i++)
printf("%c",elem->name[i]);
}
// вывод всего списка
void print_type()
{
// берем голову списка
ListElem *el = list_head;
// пока эл-т el не пуст делаем
while (el!=NULL)
{
// выводим элемент БД
print(&el->el);
// переходим на след. строку
printf("\n");
//переходим к следующему элементу
el = el->next;
}
}

// сортировка списка по полю name и вывод его на экран
void sort()
{

// открываем файл для чтения
FILE *f = fopen("file.txt","r");
if (f==NULL) return;// если ошибка, то выход из функции
// пока не закончен файл
while (!feof(f))
{
// создаем эл-т списка
ListElem *el = new ListElem;
// след. эл-та у него пока нет
el->next = NULL;
// читаем из файла эл-т БД и добавляем в список
if (fread(&(el->el),sizeof(Elem),1,f)) add_elem(el);
}
fclose(f);// закрываем файл
// берем голову списка
ListElem *p = list_head;
ListElem *q;
ListElem *m;
// пока эл-т p не пуст делаем
while (p!=NULL)
{
q=p;
m=q;
// пока эл-т q не пуст делаем
while (q!=NULL)
{
// если поле name эл-та m больше поля name эл-та q, то запомним этот элемент q
if (strcmp((char*)m->el.name,(char*)q->el.name)==1) m=q;
q=q->next;//переходим к следующему элементу
}
// меняем местами эл-ты БД p->el и m->el
Elem s=p->el;
p->el = m->el;
m->el = s;
p = p->next; //переходим к следующему элементу
}
}

void printy()
{
char c;
FILE *f = fopen("file.txt","r");
if (f==NULL) return; // если ошибка, то выход из функции
while (true)
{
fscanf(f, "%c", &c);
if (!feof(f))
printf ("%c", c);
else
break;
}fclose(f);
}

int _tmain(int argc, _TCHAR* argv[])
{
printy();
sort();
printf("\n\n\n");
print_type();
getch();

return 0;
}
JolaGas вне форума Ответить с цитированием
Старый 30.05.2011, 20:01   #2
JolaGas
Новичок
Джуниор
 
Регистрация: 25.05.2011
Сообщений: 2
По умолчанию

Помощь больше не требуется.
Уважаемые модераторы, удалите пожалуйста тему.
JolaGas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка линейного односвязного списка Klik_1602 Помощь студентам 4 02.03.2011 19:45
C# Сортировка линейного списка SaikoNS Помощь студентам 6 29.10.2010 21:06
Сортировка линейного списка alesfer Помощь студентам 1 03.04.2010 21:16
Сортировка линейного списка. ТИВ Паскаль, Turbo Pascal, PascalABC.NET 3 23.11.2008 22:39