list.listLevel = 0;
};
~set_skip () {// Удаление объекта
};
int size() { // Возвращает размер
return _size;
};
void insert(T data) // Метод вставки
{
int i, newLevel;
Node *update[MAXLEVEL+1];
Node *x;
/* find where data belongs */
x = list.hdr;
for (i = list.listLevel; i >= 0; i--) {
while (x->forward[i] != list.hdr && compLT(x-
>forward[i]->data, data))
x = x->forward[i];
update[i] = x;
}
x = x->forward[0];
if ((x != list.hdr) && compEQ(x->data,
data)) return;
/* determine level */
for (newLevel = 0; rand() < RAND_MAX/2
&& newLevel < MAXLEVEL; newLevel++);
if (newLevel > list.listLevel) {
for (i = list.listLevel + 1; i <= newLevel;
i++)
update[i] = list.hdr;
list.listLevel = newLevel;
}
/* make new node */
if ((x = (Node*)malloc(sizeof(Node) +
newLevel*sizeof(Node *))) == 0) {
printf ("insufficient memory (insertNode)\
n");
exit(1);
}
x->data = data;
/* update forward links */
for (i = 0; i <= newLevel; i++) {
x->forward[i] = update[i]->forward[i];
update[i]->forward[i] = x;
}
_size++;
return;
};
void delete_item(T data) // Метод удаления элемента возвращает 1 -
если объект
// был удален 0 - если объекта не было в
set-е
{
int i;
Node *update[MAXLEVEL+1], *x;
/*******************************************
* delete node containing data from list *
*******************************************/