考研笔试之数据结构必背算法(二)

二叉树的先序递归:

void preorder(BiTree T){
    if (T!=NULL){
        visit(t);
        preorder(T->lchild);      
        preorder(T->rchild);
        }
}

二叉树的中序递归:

void preorder(BiTree T){
    if (T!=NULL){
        preorder(T->lchild);   
        visit(t);   
        preorder(T->rchild);
        }
}

二叉树的后序递归:

void preorder(BiTree T){
    if (T!=NULL){
        preorder(T->lchild); 
        preorder(T->rchild);
         visit(t);   
        }
}

二叉树先序非递归:

void preorder2(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 inorder2(BiTree T){
    initstack(s);
    BiTree p=T;
    while(p||Isempty(s)){
        if(p){
            push(s,p);
            P=P->lchild;

    }
        else{
            pop(s,p);
            visit(p);
            p=p->rchild;
}
}
}

二叉树后序非递归:

void postorder2(BiTree T){
    initstack(s);
    BiTree p=T;
    r=NULL;            //r表示记录上一个被访问的节点
    while(p||Isempty(s)){
        if(p){
            push(s,p);
            P=P->lchild;

    }
        else{
            Gettop(s,p);
            if(p->rchild && p->child != r){
                p=p->rchild;
                push(s,p);
                p=p->lchild;

                }
            else{
                pop(s,p);
                visit(p);
                r=p;        //更新
                p=NULL;        //把p置为空,因为p被访问过

            }         
        }
    }
}

层次遍历:

void leveorder2(BiTree T){
    initqueue(q);
    BiTree p=T;
    enqueue(q,p);
    while(!Isempty(q)){
        dequeue(q,p);
        visit(p);
        if(p->lchild != NULL)
            enqueue(q,p->lchild);
        if(p->rchild != NULL)
            enqueue(q,p->rchild);
        }
}

 

数据结构算法演示 1. 顺序表 (1)在顺序表中插入一个数据元素(ins_sqlist) (2)删除顺序表中一个数据元素(del_sqlist) (3)合并两个有序顺序表(merge_sqlist) 2. 链表 (1)创建一个单链表(Crt_LinkList) (2)在单链表中插入一个结点(Ins_LinkList) (3)删除单链表中的一个结点(Del_LinkList) (4)两个有序链表求并(Union) (5)归并两个有序链表(MergeList_L) (6)两个有序链表求交(ListIntersection_L) (7)两个有序链表求差(SubList_L) 3. 栈和队列 (1)计算阿克曼函数(AckMan) (2)栈的输出序列(Gen、Perform) (3)递归算法的演示  汉诺塔的算法(Hanoi)  解皇后问题的算法(Queen)  解迷宫的算法(Maze)  解背包问题的算法(Knap) (4)模拟银行(BankSimulation) (5)表达式求值(Exp_reduced) 4. 串的模式匹配 (1)古典算法(Index_BF) (2)求Next 函数值(Get_next)和按Next 函数值进行匹配 (Index_KMP(next)) (3)求 Next 修正值(Get_nextval)和按 Next 修正值进行匹配(Index_KMP(nextval)) 5. 稀疏矩阵 (1)矩阵转置 (Trans_Sparmat) (2)快速矩阵转置 (Fast_Transpos) (3)矩阵乘法 (Multiply_Sparmat) 6. 广义表 (1)求广义表的深度(Ls_Depth) (2)复制广义表(Ls_Copy) (3)创建广义表的存储结构(Crt_Lists) 7. 叉树 (1)遍历叉树  叉树的线索化  先序遍历(Pre_order)  中序遍历(In_order)  后序遍历(Post_order) (2) 按先序建叉树(CrtBT_PreOdr) (3) 线索叉树  叉树的线索化  生成先序线索(前驱或后继) (Pre_thre)  中序线索(前驱或后继) (In_thre)  后序线索(前驱或后继) (Post_thre)  遍历中序线索叉树(Inorder_thlinked)  中序线索树的插入(ins_lchild_inthr)和删除(del_lchild_inthr)结点 (4)建赫夫曼树和求赫夫曼编码(HuffmanCoding) (5)森林转化成叉树(Forest2BT) (6)叉树转化成森林(BT2Forest) (7)按表达式建树(ExpTree)并求值(CalExpTreeByPostOrderTrav) 8. 图 (1)图的遍历  深度优先搜索(Travel_DFS)  广度优先搜索(Travel_BFS) (2)求有向图的强连通分量(Strong_comp) (3)有向无环图的两个算法  拓扑排序(Toposort)  关键路径(Critical_path) (4)求最小生成树  普里姆算法(Prim)  克鲁斯卡尔算法(Kruscal) (5)求关节点和重连通分量(Get_artical) (6)求最短路径  弗洛伊德算法(shortpath_Floyd)  迪杰斯特拉算法(shortpath_DIJ) 9. 存储管理 (1)边界标识法 (Boundary_tag_method) (2)伙伴系统 (Buddy_system) (3)紧缩无用单元 (Storage_compaction) 10. 静态查找 (1)顺序查找(Search_Seq) (2)折半查找 (Serch_Bin) (3)插值查找 (Search_Ins) (4)斐波那契查找 (Search_Fib) (5)次优查找树(BiTree_SOSTree) 11. 动态查找 (1)在叉排序树上进行查找(bstsrch)、插入结点(ins_bstree)和删除结点(del_bstree) (2)在叉平衡树上插入结点(ins_AVLtree) 和删除结点(del_AVLtree) (3)在 B-树上插入结点(Ins_BTree) 和 删除结点(Del_BTree) (4)在 B+树上插入结点(Ins_PBTree) 和 删除结点(Del_PBTree) 12. 内部排序 (1)简单排序法  直接插入排序(Insert_sort)  表插入排序(内含插入(Ins_Tsort) 重排(Arrange)两个算法)  起泡排序(BubbleSort)  简单选择排序(SelectSort) (2)复杂排序法  堆排序(HeapSort)  快速排序(QuickSort)  锦标赛排序(Tournament) (3)其他  快速地址排序(QkAddrst)  基数排序(RadixSort) 13. 外部排序 (1)多路平衡归并排序(K-Merge) (2)置换-选择排序(Repl_Selection)
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值