1. 什么是逻辑结构?逻辑结构有哪些?
数据元素之间的逻辑关系(抽象的)
集合结构(无关系)
线性结构(一对一)
树形结构(一对多)
图形结构(多对多)
2. 什么是存储结构?存储结构有哪些?
数据结构在计算机中的表示(具体的)
- 顺序存储:
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
地址 | adr+0 | adr+1 | adr+2 | adr+3 | adr+4 | adr+5 |
1 | 2 | 3 | 4 | 5 | 6 | |
下标 | 0 | 1 | 2 | 3 | 4 | 5 |
c语言表示:
int Array[6]={1,2,3,4,5,6}; // 定义数组并初始化
printf("%d\n",Array[3]); // 随机访问第四个元素
【注】随机是任意到某一个元素,
到任何一个位置的时间复杂度是相等的
- 链式存储:
… | A | adr+x | … | B | adr+y | … | C | adr+z | … |
---|---|---|---|---|---|---|---|---|---|
→ | A | → | B | → | C | → |
c语音实现:
// 定义一个结构体
typedef struct Lnode {
ElemType data; // 存内容 ElemType任意类型
struct Lnode *next; // next指向下一个Lnode节点
}Lnode, *LinkList; // 别名Lnode 指针别名
Lnode *L;
// 动态申请空间大小
L=(LinkList)malloc(sizeof(Lnode));
A->next=B;
B->next=C;
【注】next如果有动向指向下一个节点,如果没有了为NULL
- 索引存储
- 散列存储
逻辑结构 | vs | 存储结构 | |
---|---|---|---|
优点 | 可以实现随机存取,每个元素占用最少的空间 | 充分利用所有存储单元,不会出现碎片现象 | |
缺点 | 只能使用整块的存储单元,会产生较多的碎片 | 需要额外的存储空间用来存储下一个节点的指针,只能实现顺序存取 |
3. 时间复杂度核空间复杂度
- 算法定义
对特定问题求解步骤的描述,成为算法。
【特点】有穷、确定、可行、输入、输出。 - 时间复杂度
def: 指所有语句的频度(执行次数)之和。
T(n)=O(f(n));
常见的时间复杂度:
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n^2)<O(n^3)<O(n^n)<O(n!);
【a的x次方等于N,x=logaN,例如 3=log2(8)】
最高阶越小,性能越好,1最优
执行次数是固定的就是O(1),
时间复杂度计算忽略高阶项系数和低阶项