![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 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; } |
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 25.05.2011
Сообщений: 2
|
![]()
Помощь больше не требуется.
Уважаемые модераторы, удалите пожалуйста тему. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сортировка линейного односвязного списка | 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 |