imin=j;
}
if (jelem->data[j+1]==NULL) { /* шаг по j */
jelem=jelem->next;
j=0;
} else j++;
}
tmp=minelem->data[imin]; /* меняем местами минимум с i-м элементом */
minelem->data[imin]=ielem->data[i];
ielem->data[i]=tmp;
if (ielem->data[i+1]==NULL) { /* шаг по i */
ielem=ielem->next;
i=0;
} else i++;
}
}
template <class T>
void CListArr<T>::InsertKeepOrder(T elem) { /* вставка elem с сохранением порядка */
TElem *cur;
int i, k;
cur=top;
k=0; /* номер элемента */
while (cur!=NULL) { /* поиск 1-го большего элемента (цикл по списку) */
i=0;
for (i=0; cur->data[i]!=NULL; i++) { /* цикл по массиву */
if (elem < *(cur->data[i])) { cur=NULL; break; }
k++;
}
if (cur==NULL) break;
cur=cur->next;
}
/* после поиска определили номер k */
Insert(elem,k); /* вставка элемента elem по номеру k */
}
template <class T>
int CListArr<T>::LoadFile(char * filename) { /* загрузка из файла, filename - имя файла */
TElem *cur;
T data;
int n, i;
ifstream fin(filename);
FreeMemory(); /* освобождение памяти */
top=new TElem; /* создание 1-го элемента списка */
top->next=NULL;
top->data[0]=NULL;
cur=top;
nelems=0; /* инициализация счетчика */
fin >> n; /* считываем количество элементов массива 1-го элемента списка */
if (fin==NULL) { /* если конец файла (пустой файл) */
delete top; /* удаляем вершину списка */
top=NULL;
return -1;
}
while (1) {
if (n>MAXN) { /* если в файле размер строки больше допустимой */
FreeMemory(); /* удаление всей структуры */
return -1;
}
for (i=0; i<n; i++) { /* считывание элементов массива */
fin >> data;
cur->data[i]=new T;
*(cur->data[i])=data;
nelems++;
}
cur->data[n]=NULL;
cur->next=NULL;
fin >> n; /* считывание количества элементов следующего массива */
if (fin!=NULL) { /* если не конец файла */
cur->next=new TElem; /* создание нового элемнта списка */
cur=cur->next;
cur->next=NULL;
cur->data[0]=NULL;
} else break; /* выход */
}
return 0; /* успешное завершение */
}
template <class T>
void CListArr<T>::SaveFile(char * filename) { /* сохранение данных в файле */
ofstream fout(filename);
TElem *cur;
int i;
for (cur=top; cur!=NULL; cur=cur->next) { /* цикл по списку */
fout << nElems(cur);
/* вывод массива данных */
for (i=0; cur->data[i]!=NULL; i++) fout << " " << *(cur->data[i]);
fout << endl;
}
}
template <class T>
void CListArr<T>::Balancing() { /* балансировка структуры */
/* curnew - позиция элемента в новом списке, curold - в старом списке */
TElem * curnew, *curold, *tmp;
/* позиция в массиве нового (inew) и старого списка (iold) */
int inew, iold;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.