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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2012, 22:12   #1
Levenyatko
Новичок
Джуниор
 
Регистрация: 05.07.2012
Сообщений: 1
По умолчанию сортировка односвязного списка

нужно отсортировать информацию о поездах по номеру маршрута. не работает сортировка. помогите найти ошибку.

Код:
 #include<stdio.h>
 #include<conio.h>
 #include<stdlib.h> 
 #include<string.h>

struct train {
       char punkt[10];  
       int nomer;
       float time;
       struct train *next;
};

 // присоединение элемента к голове, возврат адреса головы 
struct train *create(struct train *head, int n,float t,char *p) {
       struct train *element; // указатель на новую структуру
       element = (struct train *)malloc(sizeof(struct train)); // выделяем память
       element->next = head;
       element->nomer = n;
       element->time = t;
       strcpy(&element->punkt[0],&p[0]);

       return element;
}

 // печать стека
 void print(struct train *p)
 {
      printf(" ___________________________________\n");
      printf("|punkt nazn |nom marsh|otpravlenije\n");
      printf("|___________________________________\n");   
         
     while (p != NULL) 
     { 
           printf("%10s | %7d | %.2f \n ", p->punkt, p->nomer, p->time);
           p = p->next; // продвижение по списку
     }
     printf("\n");
}

void sort(train * head) 
{
    train *p1,* p2,*list,*pb;
      int n;float t;char pk[10];
    list=head;
    if (list != NULL) {
        while (list->next != NULL) 
        {         
            
            p1=list;
            p2=p1->next;

            do 
            {
                if (p2->nomer > p1->nomer) {

                                          if(p1==head)
                                             {  p1->next=p2->next;
                                                p2->next=p1;
                                                head=p2;}
                                          else {
                                                p1->next=p2->next;
                                                p2->next=pb->next;
                                                pb->next=p2;
                                              
                                               }print(head);  p2=p2->next;
                                             }
                else p1=p1->next;
                p2 = p2->next; 
            } while (p2 != NULL);
            pb=list;
            list = list->next;
        }
    }
}

void info(train * list) 
{
       int n,k=0;
  
    printf("Vvedite nomer poezda\n");
    scanf("%d",&n);
          while (list->next != NULL) 
        {
               if (list->nomer==n) { printf("%10s | %7d | %.2f \n ", list->punkt, list->nomer, list->time);break;}
               else k++;
            list = list->next;
            if(list->next == NULL || k==0){printf("poezd ne najden\n");}
        }
}

int main() 
{
       int n,k=0;float t;char p[10];
       struct train *head; // адрес, указывающий на голову стека
       head = NULL;
       	FILE *f;
     
	f = fopen("train.txt","r");
	
    while (!feof(f))
    { 
	   fscanf(f,"%s %d %f", &p, &n, &t);
       head=create(head,n,t,p);
	}
	
    print(head);
for(;;)
{
    printf("Vyberite operaciju\n 1 - sortirovka po nomeru poezda\n 2 - poisk poezda po nomeru\n");
    scanf("%d",&k);
    if (k==1){sort(head);
                 print(head);}
    else{if(k==2) {info(head);}
         else break;        
        }      
}
       
       fclose(f);   
       free(head);
       getch(); 
       return 0;
}


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 06.07.2012 в 10:56.
Levenyatko вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка динамического односвязного списка (язык Си) Tokar_1 Общие вопросы C/C++ 0 25.04.2012 06:09
Сортировка линейного односвязного списка Klik_1602 Помощь студентам 4 02.03.2011 19:45
Сортировка односвязного списка (C++) biograf Помощь студентам 0 14.12.2010 21:21
Сортировка односвязного списка amerhant Общие вопросы C/C++ 1 13.05.2010 20:25
Сортировка односвязного списка btf Общие вопросы C/C++ 0 15.02.2010 14:40