今天初始了一下数据结构
1,了解时间复杂度和空间复杂度
时间复杂度:程序执行次数是关于n的函数,就是看程序执行次数。
空间复杂度:计算算法所需的储存空间,也就是定义了几个变量,内存大小。
时间复杂度和空间复杂度都需要拿大O阶的方法,有常数项,线性阶,平方阶。
用常数1取代运行时间中的所有加法常数。
在修改后的运行次数函数中,只保留最高项阶。
如果最高阶项存在且不是1,则去除与这个项相乘的常数。
得到的结果就是大O阶
常见的时间复杂度
O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)
2,浅浅的学习了一下线性表
概念:零个或多个数据元素的有限序列
其存储结构有俩个
a,顺序存储结构
每个元素按顺序排序,就像数组一样。
b,链式存储结构
不按顺序但每个节点有下一个节点的地址,方便寻找。
学习线表和链表的时候发现c语言基础仍然有欠缺
1,结构体自定义,和typedef运用不熟悉,见的代码有点少。
2,动态内存管理欠缺比较严重,笼统学习了一下,对malloc,calloc,realloc,free,的运用有了较好的认识。
//线性表 用代码实现A = A U B
//线性表的线式存储结构
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FAlSE 0
typedef int ElemType;
typedef int Status;
typedef struct Node {
Status data[100];
int length;
} SqList;
Status GetElem(SqList L, int i, ElemType* e) //将线性表L中第i个位置元素值返回给e
{
if (L.length == 0 || i<1 || i>L.length)
return ERROR;
*e = L.data[i - 1];
return OK;
}
Status ListInsert(SqList* L, int i, ElemType e) //在线性表中插入数据
{
int k;
if (L->length == 100)
return ERROR;
if (i<1 || i>L->length + 1)
return ERROR;
if (i <= L->length)
{
for (k = L->length - 1; k >= i - 1; k++)
{
L->data[k + 1] = L->data[k];
}
}
L->data[i - 1] = e;
L->length++;
return OK;
}
Status ListDelete(SqList* L, int i, ElemType* e) //删除线性表第i的元素
{
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;
}
3,指针的学习不太扎实,有些指针复杂了出现看不懂的情况,或是看错了,指针学习有待加强。
总结:今天主要是知识的学习,输入,对代码实操比较少,明天要加强对自主写代码的练习,还有就是题集中的题二分法,dfs 还是不太懂,也要找个视频去深度学习一下.