Link insert(Link pq,Item aData)
{
if (!pq)
{
return pq;
}
if (pq->l)
{
if (pq->data == pq->l ->data)
{
pq->flag = 1;
insert(pq->l, aData);
}
}
if (pq->r)
{
if (pq->data == pq->r->data)
{
pq->flag = 1;
insert(pq->r, aData);
}
}
if (pq)
{
if (pq->flag == 1)
{
if ((pq->l->flag == 0)||(pq->r->flag == 0))
{
if (pq->l->data == pq->data)
{
Link x = NEW(aData);
Link x1 = NEW(aData);
if (aData < pq->l->data)
{
x1->data = pq->l->data;
}
x1->l = pq->l;
x1->r = x;
if (x1->data > pq->r->data)
{
pq->data = x1->data;
}
else if (x1->data > pq->r->data)
{
pq->data = pq->r->data;
}
pq->l = x1;
}
else if (pq->r->data == pq->data)
{
Link x = NEW(aData);
Link x1 = NEW(aData);
if (aData < pq->r->data)
{
x1->data = pq->r->data;
}
x1->l = pq->r;
x1->r = x;
if (x1->data > pq->l->data)
{
pq->data = x1->data;
}
else if (x1->data > pq->r->data)
{
pq->data = pq->l->data;
}
pq->r = x1;
}
}
else
{
if(pq->l->flag == 1)
{
pq->data = pq->l->data;
pq->l->flag = 0;
}
else if (pq->r->flag == 1)
{
pq->data = pq->r->data;
pq->r->flag = 0;
}
}
}
}
return pq;
}
本文详细解析了一种链表插入算法的实现过程,通过检查节点的左子节点和右子节点来确定插入位置,并根据特定条件调整节点的标志位及数据。此算法适用于需要在已排序的链表中插入新元素的场景。
2169

被折叠的 条评论
为什么被折叠?



