算法与数据结构(一)

来源:互联网 发布:淘宝详情页图片加热点 编辑:程序博客网 时间:2024/05/17 09:15

一 时间复杂度


大O阶的推导方法:

      1. 用1取代加法常数

      2. 保留最高阶项

      3.去除最高阶项的系数

常用的时间复杂度所耗费的时间从小到大:

   O(1) < O(logn) < O(n) < O(nlogn) < O(n²) < O(n³) < O(2^n) < O(n!) < O(n^n)


二 线性表顺序存储结构


定义: 指用一段地址连续的存储单元一次存储线性表的数据元素

#define MAXSIZE 20typedef int ElemType;typedef struct {    ElemType data[MAXSIZE];    int length;}SqList;

在任意时刻,线性表的长度小于等于数组的长度


插入操作

//插入操作int ListInsert(SqList L, int i, ElemType e){    int k = L.length - 1;    if (L.length == MAXSIZE) {        return ERROR;    }    //如果插入位置在表尾后一位则直接插入    if (i < 1 || i > L.length + 1) {        return ERROR;    }    if (i <= L.length) {        while (k!=i-2) {            L.data[k+1] = L.data[k];            --k;        }    }    L.data[i-1] = e;    L.length++;    return OK;}


删除操作

//删除操作int ListDelete(SqList L, int i, ElemType *e){    int k;    if (L.length == 0) {        return ERROR;    }    if (i < 1 || i > L.length) {        return ERROR;    }    *e = L.data[i-1];    if (i < L.length) {        for (k = i; k < L.length; k++) {            L.data[k-1] = L.data[k];        }    }    L.length--;    return OK;}

该结构的存取动作时间复杂度为O(1), 插入删除动作的时间复杂度为O(n)


该结构的优缺点:


原创粉丝点击