复习:
1、什么是数据结构
是专门研究数据关系和操作的学科,而非计算方法
数据结构+算法=程序
2、逻辑结构和物理结构:
逻辑结构:
集合:除了同处于一个集合外,数据之间没有任何关系
表:数据之间存在一对一的关系
树:数据之间存在一对多的关系
图:数据之间存在多对多的关系
物理结构:
顺序结构:数据存储在连续的内存中,使用数据的相对位置来表示数据之间的关系
链式结构:数据分散存储在内存的任何位置,数据项中有一块指针域用来表示数据之间的关系
逻辑结构和物理结构的对应关系:
表: 顺序、链式
树: 链式、顺序
图: 顺序+链式
3、数据结构的运算
创建、销毁、清空、添加、插入、删除、查询、访问、修改、排序、遍历
4、表结构
顺序表: 数组
链式表: 链表
常见面试题: 数组和链表的优缺点?
5.功能受限的表结构
栈: 只有一个出入端口,先进后出
顺序栈有四种:
top初值:0 入栈 top++ 空增栈
top初值:-1 top++ 入栈 满增栈
top初值:cal-1 入栈 top-- 空减栈
top初值:cal top-- 入栈 满减栈
队列:有两个出入端口,队尾智能进,队头只能出,先进后出 FIFO
链式队列:
数据项:
存储元素的内存首地址
容量
队头
队尾
运算:创建、销毁、入队、出队、队头、队尾、数量
注意:
由一堆数组+队头front+队尾rear组成,入队rear+1,出队front+1,为了让队列能反复使用,我们要把一堆数组想象成一个环,因此front、rear加1后要用队列的容量求余重新赋值
rear=(rear+1)%cal
front=(front+1)%cal
如何判断队空: front==rear
如何判断队满:front==(rear+1)%cal
1、代价是空一格位置不能使用(常考)
2、添加一个数据项标记队列中元素的数量,以此也可以解决队空队满的问题
如何获取元素数量:
(rear-fornt+cal)%cal
链式队列:
由若干个节点组成的队列
队列数据项:
队头指针
队尾指针
节点数量
运算:创建、销毁、队空、入队、出队、队头、队尾、数量
队列的应用:
1、消息队列
2、树的层序遍历
3、图的广度优先遍历
4、线程池、数据池
常考的笔试面试题:
使用两个栈来模拟一个队列的功能
从s1入到s2,一个不留
s2如果不空,不能让s1到s2
封装链表:
链表的尾添加效率低、对非法下标的判断效率非常低
1、单链表
2、静态链表
3、循环链表
4、双向链表
5、内核链表
6、通用链表