2017/11/24(数据结构)

1.链表的倒数第K个查找

void search(LinkList &L, ElemType k){
    LNode *p,*q;
    p = L->next;
    q = L->next;
    int count = 0;
    while(p != nill){
        if(count < k){
            count++;
        }
        else{
            q = q->next;
            }
        p = p->next;
    }
    if(count < k)
        return 0;
    else{
        print(p->data);
        return 1
        }
    }
}

2.手写遍历算法

  • 递归先序遍历
 void preOrder(BiTree T){
     if(T != null){
         visit(T);
         preOrder(T->lchild);
         preOrder(T->rchild);
     }
 }
  • 非递归先序遍历
void preOrder(BiTree T){
    InitStack(S);
    BiTree p = T;
    while(p||isEmpty(s))
    {
        if(p){
            push(S, p);
            visit(p);
            p = p->lchild;
            }
        else{
            pop(S, p);
            p = p->rchild;
        }
    }
}
  • 层次遍历
void levelOrder(BiTree T){
    InitQueue(Q);
    BiTree q = T;
    EnQueue(q);
    while(!isEmpty(Q)){
        DeQueue(Q,q);
        visit(q);
        if(q->lchild != null)
            EnQueue(Q, q->lchild);
        if(q->rchild != null)
        EnQueue(Q, q->rchild);
    }
}

3.字符串匹配算法

  • 普通匹配

  • kmp算法

4.逆波兰表达式
中缀表达式转成后缀表达式(如(a+b)*(c+d)转换为 ab+cd+*
转换规则:当前字符为变量或者数字,则存入后缀表达式;如果是运算符op,op比操作符栈顶优先级高则压入,否则将栈中操作符不断弹出,直到op的优先级高于栈顶。

5.二叉搜索树
它或者是一棵空树;或者是具有下列性质的二叉树:若左子树不空,则左子树上所有结点的值均小于它的根结点的值;若右子树不空,则右子树上所有结点的值均大于它的根结点的值;左、右子树也分别为二叉排序树。若子树为空,查找不成功。
可以显著的改进查找的效率,查找一个数据的了路径最长不超过树的深度。

//递归实现  
Tree_Search(x, k):  
if x == NIL or x.key == k :  
    return x  
if k < x.key  
    return Tree_Search(x.left, k)  
else return Tree_Search(x.right, k)  

6.平衡二叉搜索树(红黑树)
就是若一棵二叉树的每个左右节点的高度差最多相差1,此二叉树即是平衡二叉树。把二叉树的每个节点的左子树减去右子树定义为该节点的平衡因子。二叉平衡树的平衡因子只能是1、0或者-1。
在二叉搜索树的插入和删除运算中,采用平衡树的优点是:使树的结构较好,从而提高查找运算的速度。缺点是:是插入和删除运算变得复杂化,从而降低了他们的运算速度。

7.散列

  1. 散列函数
    • 平方取中法
    • 除留余数法
    • 折叠法
    • 数字分析法
  2. 解决冲突
    • 开放定址法
    • 拉链法

7.排序算法

  1. 插入排序

    • 直接插入排序
    • 折半插入排序
    • 希尔排序
  2. 交换排序

    • 起泡排序
    • 快速排序
  3. 选择排序

    • 直接选择排序
    • 堆排序
    • 竞标赛排序
  4. 归并排序

    • 归并
    • 迭代归并
  5. 基数排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值