工作已经找好,看到以前的学习笔记竟然有人看,就把记忆中(过了3个月,不知道记得多少)的自己笔试面试中碰到过,与朋友碰到的重点内容相关的题注释在旁边,希望对大家面试有用。只是个人观点和经验
(好久没有写博客了,近期开始找工作,想把以前学过的课程复习一下,把大纲和基本的概念记下,方便后面的复习。)
#1、绪论
数据结构的内容:逻辑结构、存储结构、运算集合。
数据类型:一个值的集合和定义在此集合上的一组操作的总称。
抽象数据类型:abstract data type,用户经行软件设计时从问题的数学模型中抽象出来的逻辑数据结构和逻辑数据结构上的运算,而不考虑计算机具体存储结构和运算的具体实现算法。此模块包含定义、表示和实现。也就是数据对象的定义、数据关系的定义、基本操作的定义。
算法特征:有穷性、确定性、可行性、输入、输出
算法设计的要求:正确性、可读性、健壮性、高效率和低存储的要求。
时间复杂度,空间复杂度。给一个程序要会算,常考。
#2、线性表
(笔试面试重点 :
笔试选择题经常出,要牢记顺序表和链表的定义、性质、优缺点,考题很活但不难;
***编程题面试笔试都会有:有头结点和无头结点的链表的反转、2个链表或数组的合并、3个数组归并……***)
定义:一个线性表示具有n个数据元素的有限序列
特点:同一性、有穷性、有序性
顺序表特点:
- 无需为表示元素间的逻辑关系而增加额外的存储空间
- 可随机取表的任一个元素
- 插入或删除元素,需平均移动表的一半元素。
- 存储分配只能预先进行分配
- 将2个各有n个元素的有序表归并为一个有序表,其最少的比较次数是:n
线性表链式存储结构的特点:
- 任意的存储单元存储元素,不要去逻辑上相邻的元素在物理位置上也相邻。
- 插入删除时不需要移动大量元素
- 失去顺序表可随机存取的优点
静态链表(数组表示和实现)
- 在单链表中,不能从当前结点出发访问到任一结点。
- 删除某一结点,必须找到该结点的前驱结点
- 此结构是一种顺序存取的存取结构,不具有随机访问任一元素的特点。
- 设置头结点的作用,使用在链表的第一个位置上的操作和表中其他位置上的操作一致,无需进行特殊处理,对空表和非空表的处理统一。
其他链表: 循环链表、双链表要了解
#3、限定性线性表——栈和队列
(笔试面试重点 :
笔试选择题经常出,一般都是从队列的进出顺序上做文章;
***编程题一般出在笔试,相对难一点:如迷宫、深搜、广搜 ***)
##栈
- 栈是一种具有线性结构的数据结构,是操作受限的线性表
- 栈的特点是后进先出,只能在栈顶进行插入和删除操作,入栈、出栈
- 顺序栈中,栈空标志:S.top=S.base;
栈满标志:S.top-S.base>=S.stacksize; - 链栈中,不设头结点,头结点就是栈顶指针,栈空S=NULL。 <