Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Последовательный поиск в односвязном списке

86K
01 декабря 2012 года
vo0vka
2 / / 29.11.2012
Помогие написать блок для последовательного поиска по отсортированному списку

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <conio.h>
 #include <stdlib.h>
#include <fstream.h>
#include <iostream>
#pragma hdrstop
 typedef struct
 {
 char fam[15];
 char name[15];
 int god;
 int ser;
 int nom;
 float money;
 } Tkadr;
 typedef Tkadr TMaskadr[50];

 typedef struct TListkadrTag
 {
 TListkadrTag *next;
 char fam[15];
 char name[15];
 int god;
 int ser;
 int nom;
 float money;
 } TListkadr;

//---------------------------------------------------------------------------

#pragma argsused
TMaskadr MAS;
//TListkadr *PListkadr;
TListkadr *PList;
TListkadrTag *p;

void qsort1(TMaskadr &item, int left,int right)
 {
   int i,j,k;
   int comp;
   Tkadr buf;
   i=left; j=right;
   k= (left+right)/2;
   comp=item[k].ser;    // Компаранд
   do {
     while(item[i].ser<comp && i<right)
       i++;
     while(comp<item[j].ser && j>left)
       j--;
     if(i<=j) {
       buf=item[i];  // Обмен
       item[i]=item[j];
       item[j]=buf;
       i++; j--;
     }
   } while(i<=j);
   if(left<j)
     qsort1(item,left,j);  // Рекурсивный вызов
   if(i<right)
     qsort1(item,i,right);
 }
//---------------------------------------------------------------------------
TListkadr* AddItemToEnd(TListkadr* PList, Tkadr MAS_i){
  TListkadr *PNewItem, *Next;
  Next = PList;
 if (Next) {
   while(Next->next)
     Next=Next->next;
  PNewItem = new TListkadr;
  Next->next= PNewItem;

  StrCopy(PNewItem->fam, MAS_i.fam);
  StrCopy(PNewItem->name, MAS_i.name);
  PNewItem->god=MAS_i.god;
  PNewItem->ser=MAS_i.ser;
  PNewItem->nom=MAS_i.nom;
  PNewItem->money=MAS_i.money;
  PNewItem->next=NULL;
  return PList;
 }
 else {
  PNewItem = new TListkadr;
  StrCopy(PNewItem->fam, MAS_i.fam);
  StrCopy(PNewItem->name, MAS_i.name);
  PNewItem->god=MAS_i.god;
  PNewItem->ser=MAS_i.ser;
  PNewItem->nom=MAS_i.nom;
  PNewItem->money=MAS_i.money;
  PNewItem->next=NULL;
  return PNewItem;
 }

delete PNewItem;
delete Next;
}
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
char imya;
ifstream file("kadr.txt", ios_base::in); // открыли файл для чтения
int i=0;
  while(!file.eof()){
   file >> MAS[i].fam >> MAS[i].name >> MAS[i].god >> MAS[i].ser>>
        MAS[i].nom>>MAS[i].money;
   ++i;
   }

  for (i = 0; i<= 4; i++){
    printf("fam=%s name=%s god=%d ser=%d nom=%d money=%.2f\n",
    MAS[i].fam, MAS[i].name, MAS[i].god, MAS[i].ser, MAS[i].nom, MAS[i].money);
         }
qsort1(MAS, 0, 4);

printf("\nSorirovka po serii pasporta:\n");
ofstream book_file("Qsort.txt");

for (i = 0; i <= 4; i++)
    {printf("fam=%s name=%s god=%d ser=%d nom=%d money=%.2f\n",
           MAS[i].fam, MAS[i].name, MAS[i].god, MAS[i].ser, MAS[i].nom, MAS[i].money);

   //Сохранение полученных данных в созданный файл
   book_file << "Фамилия "<<MAS[i].fam<<" Имя "<<MAS[i].name<<" Год "
           <<MAS[i].god<< " Серия "<<MAS[i].ser
           << " Номер "<<MAS[i].nom<<" Зарплата "<<MAS[i].money<<endl;
    }


for (i = 0; i <= 4; i++)
PList = AddItemToEnd(PList, MAS[i]);

 }
getche();
return 0;
}
//---------------------------------------------------------------------------
86K
01 декабря 2012 года
vo0vka
2 / / 29.11.2012
все, написал

Код:
TListkadr* Poisk(TListkadr* PList, int d)
{
 TListkadr *cur;
 cur=PList;
 while(cur!=NULL && cur->god>=d)
 {
    if(cur->god==d)
    { printf("fam=%s name=%s god=%d ser=%d nom=%d money=%.2f\n",
         PList->fam, PList->name, PList->god, PList->ser, PList->nom,
         PList->money);
         return cur;
        }
    }
    //printf("Element %d ne naiden \n", d);
    return NULL;
}
43K
02 декабря 2012 года
krid24
1 / / 20.09.2008
Издеваешься? А гуглить не пробовал?
392
02 декабря 2012 года
cronya
421 / / 03.01.2009
я вообще не понимаю нафига массив создавать, когда читаешь с файла, что мешает сразу в список передовать значения. Не рационально память используешь.
И как понять этот момент:


 
Код:
TListkadr* AddItemToEnd(TListkadr* PList, Tkadr MAS_i){
/*тут сначала создал переменную типа структуры
........
*/

//а тут сразу же ее удалил?!
delete PNewItem;
delete Next;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог