文章目录
一、第一章
数据结构
相互之间存在一种或多种关系的数据元素的集合。
数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
| 结构 |
|---|
| 逻辑结构 |
| 存储结构 |
逻辑结构
逻辑结构是从逻辑关系上描述数据,他与数据的存储无关,是独立于计算机的。
| 逻辑结构的两要素 |
|---|
| 关系 |
| 数据元素 |
| 逻辑结构 | 类型 |
|---|---|
| 线性结构 | 线性表、栈、队列、一维数组、串 |
| 非线性结构 | 树、图、多维数组、广义表 |
1.集合结构
数据元素之间除了“属于同一集合”的关系外,别无其他关系。
2.线性结构
数据元素之间存在一对一的关系。
3.树结构
数据元素之间存在一对多的关系。
4.图结构或网状结构
数据元素之间存在多对多的关系。
存储结构
数据对象在计算机中的存储表示称为数据的存储结构,也称为物理结构。把数据对象存储到计算机时,既要存储各元素的数据,又要存储数据元素之间的逻辑关系。
| 存储结构 |
|---|
| 顺序存储 |
| 链式存储 |
1.顺序存储
借助元素在存储器中的位置来表示数据元素之间的逻辑关系。
2.链式存储
为了表示结点之间的关系,需要给每个结点附加指针段。
计算时间复杂度
- 问题规模是n
- 循环变量是i
- 假设执行t次
- 求出t
算法时间复杂度的定义
只用算法中的“基本语句”的执行次数来度量算法的工作量。
基本语句就是指算法中重复执行次数和算法的执行时间成正比的语句,它对算法运行时间的贡献最大。
步骤
- 找出所有语句中频度最大的那条语句作为基本语句
- O(…)
题目
1.如果算法的执行时间不随问题规模n的增长而增长,算法语句中频度是一个常数,即使这个常数再大,算法的时间复杂度也是O(1)
2.线性阶和平方阶
3.立方阶、平方阶
二、第二章
线性表的定义
n(n>=0)个数据特性相同的元素构成的有限序列称为线性表。
线性表中的个数n(n>=0)定义为线性表的长度,n=0时为空表
线性表的特点
| 特点 | |
|---|---|
| 1.存在的唯一的一个被称作“第一个”的数据元素 | |
| 2.存在的唯一的一个被称作“最后一个”的数据元素 | |
| 3.除第一个元素之外,结构中的每个数据元素均只有一个前驱 | |
| 4.除最后一个元素之外,结构中的每个数据元素均只有一个后继 |
线性表的顺序存储表示
线性表的顺序表指的是用一组地址连续的存储单元依次存储线性表的数据元素。
假设线性表中的每个单元占据l个存储单元(一个字节,八位二进制)
| 常见数据类型 | 字节 |
|---|---|
| char | 1 |
| int | 4 |
| float | 4 |
| double | 8 |
| long | 8 |
| long long | 8 |
| unsigned long | 8 |
线性表中第i+1个数据元素的存储位置LOC(a i+1)和第i个数据元素的存储位置LOC(a i)
LOC(ai+1)= LOC(ai)+ l
线性表中第i个数据元素的存储位置LOC(a i)和第1个数据元素的存储位置LOC(a 1)
LOC(ai) = LOC(a1) + (i-1)*l
注意实际上(i-1)是下标相减,也有可能出现第一个元素下标从0开始的情况,要具体分析
线性表的顺序存储的两个函数(插入和删除)
线性表主要是要注意位置和随时改变L->listsize和L->listlen
总结
线性表的链式存储的基本函数(建立(头插法/尾插法)、插法、删除)
建表
| 头插法 | 尾插法 |
|---|---|
| head->next=NULL; | p=head;(要用一个结点p记录插入的位置) |
| s->next=head->next; | s->next=NULL; |
| head->next=s; | p->next=s; |
| p=s; |
插入
删除
将两个有序的线性表合并成一个有序表(顺序或逆序)
尾插法(顺序)
头插法(逆序)
一元多项式的加法/减法
加法
减法
改变只有一点
循环链表(概念)
随便从哪一个结点进入顺序查找所有的结点,单链表不行
- 循环链表特点:从任一节点出发,均可以找到表中其他所有结点
- 循环链表操作和非循环链表的操作基本一致,区别仅仅在于判断p是否指向表尾的条件
| 循环链表 | 非循环链表 |
|---|---|
| p!=head | p!=NULL |
| p->next!=head | p->next!=NULL |