复习内容
科目 | 内容 | 补充 | 时间 |
---|---|---|---|
数学(6-9、69、141、143-145) | 求极限常见题型 | 8:00-15:00 | |
数据结构 | 单链表、双链表、循环单链表、循环双链表、静态链表 | 自己琢磨代码 | 17:00-20:00;21:00-23:00 |
英语 | 背单词 | 20:00-21:00 |
数学
一、函数的极限
二、数列的极限
数据结构
//逆转链表L
LinkList reverselist(LinkList &L)
{
LNode *s, *n;
s = L->next;//s顶替L指向非头结点的第一个节点
L->next = NULL;//头结点指向空
while (s != NULL)
{
n = (LNode *)malloc(sizeof(LNode));
n->data = s->data;
n->next = L->next;
L->next = n;
s = s->next;
}
return L;
}
双链表
//p节点后插入s节点
bool InsertNextNode(DNode *p, Dnode *s)
{
if (p == NULL || s == NULL) //非法参数
return false;
s->next = p->next;
if (p->next != NULL) //如果p节点不是最后一个节点
p->next->prior = s;
p->next = s;
s->piror = p;
return true;
}
//删除p节点的后继节点
bool DeleteNextDNode(DNode *p)
{
if (p == NULL)
return false;
DNode *q = p->next; //找到p的后继节点
if (q == NULL) //p没有后继
return false;
p->next = q->next;
if (q->next != NULL)
q->next->piror = q;
free(q);
return true;
}
循环单链表
特点:尾结点指针指向头结点、任何节点进行插入删除都是等价、不设头指针而设尾指针
判空条件:头结点的指针为头结点
循环双链表
特点:尾结点p,p->nextL;空表时,头结点的nextprior==L
静态链表
用数组的方式实现的链表
优点:增删不用大量移动元素
缺点:不能随机存取,只能从头结点开始一次往后查找;容量固定不可变
适用场景:①不支持指针的低级语言;②数据元素固定不变的场景(如操作系统的文件分配表FAT)
顺序表 | 链表 | |
---|---|---|
逻辑结构 | 线性表、线性结构 | 线性表、线性结构 |
存储结构 | 优点:支持随机存取、存储密度高; 缺点:大片连续空间分配不方便,改变容量不方便 | 优点:离散的小空间分配方便,改变容量方便;缺点:不可随机存取,存储密度低 |
建立 | 存储空间灵活性低 | 分配存储空间灵活 |
销毁 | 修改length=0,静态分配方式系统自动回收,动态分配需要手动free | 依次free各个节点 |
增删 | 需要将元素前/后移,时间复杂度 O ( n ) O(n) O(n),时间开销主要来自移动元素,若数据元素很大,则移动的时间代价很高 | 只需修改指针,时间复杂度O(n),时间开销主要来自查找目标元素,查找元素的时间代价更低 |
查找 | 按位查找 O ( 1 O(1 O(1);按值查找 O ( n ) O(n) O(n),若表内元素有序,可在 O ( log 2 n ) O(\log_2n) O(log2n) | 按位查找 O ( n ) O(n) O(n) ;按值查找 O ( n ) O(n) O(n) |