Сцепление - способ задания отношения следования, в котором фиксация месторасположения следующего элемента производится путем запоминания соответствующего адреса памяти (пары, хранящие и , сцеплены адресными указателями)
Сверху - логический порядок звеньев Снизу - физический порядок звеньев
Основные алгоритмические моменты метода сложения полиномов operator+ состоят в следующем:
TList TList::plus(TList list)
{
pLink tmp, ptr, temp, prev1, prev2, cnt, n;
tmp = prev1 = cnt = Head;
ptr = prev2 = temp = n = list.Head;
size = this->GetSize();
int flag = 1;
while ((tmp->pNext->data != -1) && (ptr->pNext->data != -1))
{
if ((ptr->data == -1) && (tmp->data == -1))
{
ptr = ptr->pNext;
tmp = tmp->pNext;
temp = temp->pNext;
cnt = cnt->pNext;
}
if ((tmp->data > ptr->data) && (flag == 1))
{
ptr = ptr->pNext;
this->insCurrent(temp->data, temp->data2);
list.deleteCurrent(temp->data);
temp = ptr;
flag = 0;
}
if ((tmp->data < ptr->data) && (flag == 1))
{
ptr = ptr->pNext;
tmp = tmp->pNext;
this->insCurrent(temp->data, temp->data2);
list.deleteCurrent(temp->data);
temp = ptr;
flag = 0;
}
if ((tmp->data == ptr->data) && (flag == 1))
{
this->insCurrent(tmp->data, tmp->data2 + ptr->data2);
if ((tmp->data2 + ptr->data2) == 0)
{
while ((prev1->pNext != tmp) && (n->pNext != ptr))
{
prev1 = prev1->pNext;
n = n->pNext;
}
tmp = tmp->pNext;
ptr = ptr->pNext;
this->deleteCurrent(cnt->data);
list.deleteCurrent(temp->data);
cnt = tmp;
temp = ptr;
}
flag = 0;
}
flag = 1;
}
if ((ptr->data == tmp->data) && (ptr->data != -1)
&& (tmp->data != -1))
{
this->insCurrent(ptr->data, tmp->data2 + ptr->data2);
if ((tmp->data2 + ptr->data2) == 0)
{
while ((prev1->pNext != tmp) && (n->pNext != ptr))
{
prev1 = prev1->pNext;
n = n->pNext;
}
tmp = tmp->pNext;
ptr = ptr->pNext;
this->deleteCurrent(cnt->data);
list.deleteCurrent(temp->data);
list.size--;
cnt = tmp;
temp = ptr;
}
}
if (ptr->data != tmp->data)
{
if (tmp->data == -1)
while (ptr->pNext != list.Head)
{
this->insCurrent(ptr->data, ptr->data2);
ptr = ptr->pNext;
list.size--;
}
}
if ((ptr->data != -1) && (tmp->data != -1))
{
this->insCurrent(ptr->data, ptr->data2);
list.deleteCurrent(ptr->data);
}
return *this;
}