数据结构、算法与应用

数据结构、算法与应用
一、预备知识
C++回顾
函数与参数(实参会把值赋给形参),异常,动态存储空间分配,自有数据类型(class),异常类,递归函数,标准模板库,测试和调试(白盒法和黑盒法)

程序性能分析
程序最重要的属性是正确性,程序的性能是指程序对内存和时间的需求。空间复杂度(指令空间和数据空间、环境栈空间),时间复杂度。

渐进记法
大O记法,复杂度分析

性能测量

二、数据结构
线性表-数组秒奥数
数组,vector

线性表-链式描述
单向链表(链表元素地址随机分布,数组元素地址由数学公式决定),循环链表和头结点(将单向链表的尾结点和头结点链接起来),双向链表(每个元素的节点既有一个指向后继的指针又有一个指向前驱的指针),应用(箱子排序,基数排序,凸包,并查集)

数组和矩阵
数组,矩阵,对称矩阵,稀疏矩阵

栈(后进先出)
抽象数据类型,数组描述,链式描述

队列(先进先出)
抽象数据类型,数组描述,链式描述

跳表和散列
字典,抽象数据类型,线性表描述,散列表描述

二叉树和其他树
树(层次结构),二叉树(二叉树的每个元素都恰好有两棵子树,每个元素的子树都是有序的),二叉树的特性(有n个元素则有n-1条边,高度为h时最少有h个元素最多有2的h方-1个,树有n个元素它的高度最大为n最小为log2(n+1),),二叉树描述,二叉树操作,二叉树遍历(前序,中序,后序)

优先级队列(元素出队列的顺序由元素优先级决定)
定义和应用(每个元素都有一个优先权或值),抽象数据类型,堆(一个大根堆既是大根树也是完全二叉树),左高树,堆排序(先用n个待排序的元素来初始化一个大根堆,然后从堆中逐个提取元素)

搜索树
二叉搜索树(每个元素都有一个关键字任意两个元素的关键字都不同;在根节点的左子树中,元素的关键字都小于根节点的关键字;在根节点的右子树中,元素的关键字都大于根节点的关键字;根节点的左右子树都是二叉搜索树),抽象数据类型,二叉搜索树的操作

平衡搜索树
AVL树(最坏情况下高度为O(logn)的树称为平衡树,特征:n个元素的高度O(logn);对于每一个n都存在一个AVL;)红黑树(树的每一个节点都是红色或黑色;根节点是黑色;根节点至外部节点路径上,没有连续的两个节点是红色;)B-树

图(用线或边连接在一起的节点或顶点的集合)
图的搜索(广度优先遍历;深度优先遍历)

第三部分 算法设计与方法
贪婪算法
贪婪算法思想(逐步构造一个最优解)

分而治之
算法思想(把一个大问题分为多个小问题;分别解决每个小问题;把这些小问题的解组合成大问题的解)

动态规划
问题的最优解可以由子问题的最优解推出

回溯法
就是试探法,按照优选条件去向前搜索,以达到目标

快排从小到大
void quicksort(int array[], int start, int last)
{
int i = start;
int j = last;
int temp = array[i];

if(i<j)//先检查左右条件
{
    while(i<j)
    {
        while(i<j&&array[j]>=temp)//从右向左
        j--;
        if(i<j)
        {
            array[i]=array[j];
            i++;
        }
        while(i<j&&temp>array[i])
        i++;
        if(i<j)
        {
            array[j]=array[i];
            j--;
        }
    }
    array[i]= temp; //把基准放到i处
    quicksort(array,start,i-1);//以i为中间值,左右两边递归调用
    quicksort(array,i+1,last);
}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值