Новые сообщения · Правила  
  • Страница 1 из 1
  • 1
Модератор форума: Berestovskiy  
Сортировка слиянием(1 сорт список+2 сорт список=3 сорт списо
Помогите найти ошибку уже замучалсо, итак прога:
Написать программу, составляющую по трем символьным файлам линейные упорядоченные по длине слов списки и функцию объединения списков.
Выдать объединенный список на экран.

Функцию объединения списков такую чтобы, 3 список был отсортирован слиянием по первым двум (как понимаете только это сделать не получается)

Язык С

неправильно работает функции PLNODE merge, помогите плизз

вот кот:

Code
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<string.h>
#define SIZE_OF_STRING 1000
#define SIZE_OF_word 100

typedef struct node //структура,экземпляр, указатель
{
   char str[SIZE_OF_word];
   struct node *next;
}LNODE,*PLNODE;

PLNODE merge(PLNODE *top1,PLNODE *top2,PLNODE *top3) //обьединяем 3 списка в один
{     
   PLNODE cur3=*top3;
   PLNODE cur=*top1;
   PLNODE cur2=*top2;

   int len_pre;
   int len_new;

   PLNODE newp;
    
   for( ; ; )
   {
       if((cur!=NULL))
           len_pre=strlen(cur->str);
       if((cur==NULL) && ((cur2!=NULL)))
           len_pre=len_new+1;

       if((cur2!=NULL))
           len_new=strlen(cur2->str);
       if((cur2==NULL) && ((cur!=NULL)))
           len_new=len_pre+1;

        

       if((cur==NULL) && (cur2==NULL)){
           return *top3;
       }

       if((len_pre!=0 && len_new==0)) {
           cur2=cur2->next;
           len_new=strlen(cur2->str);
       }
       if((len_pre==0 && len_new==0)) {
           cur=cur->next;
           cur2=cur2->next;
           len_pre=strlen(cur->str);
           len_new=strlen(cur2->str);
       }

       if((len_pre>len_new)) {
           if(*top3!=NULL) {
               *top3=cur2;
               cur3=*top3;
               cur3=cur3->next;
           }
           if(*top3==NULL) {
               *top3=cur2;
               cur3=*top3;
               cur3=cur3->next;
           }     
            
        
           cur2=cur2->next;
       }
       else {
           if(*top3!=NULL) {
               *top3=cur;
               cur3=*top3;
               cur3=cur3->next;
           }

           if(*top3==NULL) {
               *top3=cur;
               cur3=*top3;
               cur3=cur3->next;
           }

           cur=cur->next;
       }
   }
}

void main(void)
{
   FILE *file1;
   FILE *file2;
   
   file1=fopen("D:/abc.txt","rt");
   PLNODE top1;
...

   file2=fopen("D:/def.txt","rt");
   PLNODE top2;
...

   printf("\nlists 1+2\n===================\n");
    
   PLNODE top_1_2,topmerge=NULL,topmerge2=NULL;
   top_1_2=merge(&top1,&top2,&topmerge);

}

большую часть программы пришлось снести - нет места

1 | Автор: Promolol | 2010-05-21, 23:10 | Изменено: Promolol - Пт, 2010-05-21, 23:10   |  Репутация: [ + 0 ]
  • Страница 1 из 1
  • 1
Поиск: