【慕课学习笔记】数据结构-浙江大学

第一章 绪论

  1. 相比用循环函数,递归函数会占用较多的空间(解决问题方法的效率跟空间的利用效率有关),需要同时存储递归调用的所有函数,直到调用到结束,才释放存储空间。
  2. 计算多项式时,利用结合律f(x)=a_0+x(a_1+x(…(a_(n-1)+x(a_n ))) (秦九韶算法),所需时间比阶乘算法少,加减法比乘除法快很多。
  3. 抽象数据类型:面向对象的语言更加好定义
    • 类型名称:Matrix
    • 数据对象集:三元组,为矩阵的元素和行列
    • 操作集:矩阵乘法、加法等
  4. 分析复杂度 T(n)时,有“最坏情况复杂度”和“平均复杂度”,常用最坏情况复杂度。
  5. 大O表示法表示的复杂度的上界,Ω(n)表示复杂度的下界,θ(n)表示上下界相等。
  6. 复杂度排序:1 < log n < n < n log n < n2 < n3 < 2 n < n!
  7. 两个算法拼在一起时,复杂度相加;两算法嵌套时,复杂度相乘。
  8. for循环复杂度为循环次数乘以循环体代码复杂度,if-else结构复杂度为if条件判断和两个分支中,复杂度最大的那个。
  9. “分而治之”思想在线处理思想:每输入一个数字即处理,任何时候终止都能得到当前输入的解。

二分查找函数

#define MAXSIZE 10
#define NotFound 0
typedef int ElementType;

typedef int Position;
typedef struct LNode *List;
struct LNode {
    ElementType Data[MAXSIZE];
    Position Last; /* 保存线性表中最后一个元素的位置 */
};

List ReadInput(); /* 裁判实现,细节不表。元素从下标1开始存储 */
Position BinarySearch( List L, ElementType X );

int main(){
    List L;
    ElementType X;
    Position P;

    L = ReadInput();
    scanf("%d", &X);
    P = BinarySearch( L, X );
    printf("%d\n", P);

    return 0;
}

Position BinarySearch(List L, ElementType X){
	Position lower,mid,upper,position;
	lower = 0;
	upper = L->Last;
	while(lower<=upper){
		mid = (lower + upper) / 2;
		if (L -> Data[mid] > X)
			upper = mid - 1;
		else if ( L -> Data[mid] < X)
			lower = mid + 1;
		else 
			return mid;
	}
	return position;
}

你可能感兴趣的:(数据结构,C语言)