总结3

利用单链表,查找倒数第k个元素

int *searchk(LinkList L,int k)
{
    LNode* p, * q;;
    p = L->next;
    q = L->next;
    int count = 0;
    while (p)
    {
        if (count < k)
            count++;
        else
            q = q->next;
        p = p->next;
    }
    if (count < k)
        return 0;
    else
    {
        printf("%d", q->data);
        return 1;
    }
}

算法思想,设置两个结点指针p,q,都指向头结点的下一个结点,先让p结点走k个结点,p与q之间的距离就是k,然后让q与p同步移动,p指向空时,q所指结点即为倒数第k个元素

判断二叉树是否为完全二叉树

采用层次遍历算法,将二叉树中的所有结点入队,无论结点是否为空,遇到空结点时,查看其后是否有非空结点,若有,则二叉树不是完全二叉树

//判断二叉树是否为完全二叉树
int Complete(BiTree bt)
{
    BiTNode* p;
    p = bt;
    Queue Q;
    InitQueue(&Q);
    if (bt == NULL)
        return 1;//空树为完全二叉树
    EnterQueue(&Q, bt);
    while (!IsEmpty(Q))
    {
        DeQueue(&Q, *p);
        if (p)
        {
            EnQueue(p->lchild);
            EnQueue(p->rchild);
        }
        else
        {
            while (!IsEmpty(Q))
            {
                DeQueue(&Q, &p);
                if (p)
                    return 0;
            }
        }
    }
    return 1;
}

中序线索二叉树的后继结点

ThreadNode *Innext(ThreadNode* x)
{
    ThreadNode* p, * nextnode;
    if (x->rtag == 1)
        nextnode = x->rchild;//利用线索
    else
    {
        for (p = x->rchild; p->ltag == 0; p = p->lchild)//在x右子树中查找最左下端结点
            nextnode = p;
    }
    return nextnode;
}

有哈希表ht[0,......,m-1},H(k)=k%p(p<=m),计算平均查找失败长度

 

将该结点层号存入layer之中,并输出该结点的值和层号

 

posted @ 2021-12-03 22:34  #Lorraine#  阅读(34)  评论(0)    收藏  举报