时间复杂度
部分程序运行所消耗的时间与其数据量的大小有着密切的关系,也有一部分的运行时间和数据量大小的关系微乎其微。以下就是时间复杂度的降序排列。(其中C是指常数大小)
O(c) > O(logn) > O(n) > O(nlogn) > O(n^2) > O(n^3) > O(2^n)
数据之间的关系
1. 逻辑结构
1. 线性结构
2.非线性结构
2.存储结构
1. 顺序存储结构
2. 链式存储结构
3. 离散存储
4. 索引存储
2.1顺序结构
2.1.1顺序表:顺序表在某种程度上与数组有相同的地方,比如顺序表的大小和数量是有限的,并且因为顺序的存在,顺序表是连续的。
以下的代码是顺序表的定义,定义一个结构体,其中包含顺序表存储的数据的首地址,存储数据的个数和最大能够存储的数量。
其中的DataType *pData可以看作是一个数组,用访问下标的方式进行顺序表的遍历、赋值、查询、修改等操作。
值得注意的是在增添或删除顺序表时需要使用malloc和free的方式。
typedef struct list
{
DataType *pData;
int tLen;
int cLen;
}SeqList;
2.1.2链表
单项链表:链表的节点中存储节点数据和下一个节点的地址,即便链表之间的地址不连续,也可以通过头节点访问到后面节点存储的数据。
双向链表:一个节点存储上一个和下一个节点的地址,这样就可以双向访问(循环访问)。
typedef struct node
{
DataType Data;
struct node *pNext;
}LinkNode;