1.什么是数据结构?
数据结构就是存在某些特定关系的数据元素的集合。
数据结构三要素:逻辑结构、物理结构、运算
逻辑结构:线性结构、集合结构、图状结构、树状结构
物理结构:顺序存储、链式存储、哈希存储、索引存储
2.常见的数据结构:
a、数组:顺序存储,随机访问 链表:链表存储,顺序访问
b、栈,分为栈顶和栈底,遵循先进后出原则
c、队列,一个线性表,像排队一样,受约束控制,遵循先进先出
d、树:二叉树、平衡二叉树、大顶堆,小顶堆等
e、图:最短路径,关键路径
3.数组和链表的区别:
从逻辑结构看:
a)数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取。
b)链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项,繁琐)链表必须根据next指针找到下一个元素
从内存存储来看:
a)(静态)数组从栈中分配空间,对于程序员方便快速,但是自由度小
b)链表从堆中分配空间,自由度大但是申请管理比较麻烦
从上面的比较可以看出,如果需要快速访问数据,很少或不插入和删除元素,就应该用数组:相反,如果需要经常插入和删除元素就需要用链表数据结构了
4.算法的特性:
- 有限性:有限步骤之内正常结束,不能形成无穷循环。
- 确定性:算法中的每一个步骤必须有确定含义,无二义性。
- 可行性:原则上能精确进行,操作可通过已实现的基本运算执行有限次而完成。
- 输入:有多个或0个输人。
- 输出:至少有一个或多个输出。
在算法的五大特性中,最基本的是有限性、确定性和可行性这三个特性。
5. 时间复杂度与空间复杂度
- 时间复杂度:是衡量算法执行时间的指标
时间复杂度用于描述随着输入数据规模的增加,算法执行时间的增长情况。它通常使用大O表示法,这种表示法不会考虑低阶项和首项系数,只关注函数增长的主要趋势。 - 空间复杂度:该算法所耗费的存储空间的数量级。
6.队和栈的假溢出是怎么回事?如何解决这种问题?
系统作为队列用的存储区还没有满,但队列却发生了溢出,我们把这种现象称为“假溢出”。
2)解决办法:
一是将队列元素向前“平移”(古用O至rear-front-1):
二是将队列看成首尾相连,即循环队列(O...m-1);
7.循环和递归的区别:
递归:在函数里调用自身。
递归:优点:代码简洁,容易检查正确性
缺点:运算效率低,递归次数过多时,要增加额外的堆栈处理,且堆栈可能溢出,影响执行效率。
循环:优点:结构简单,速度快,重复执行某段代码块,直到满足特定条件为止。
缺点:不能解决全部问题,有的问题适合用递归
8.二叉树有哪些存储方式?
顺序存储结构:用一个数组来存储一颗二叉树,二叉树中的结点值按照编号依次存入一个一维数组中,适用于完全二叉树,若用于一般的二叉树则会浪费大量存储空间
链式存储结构:二叉树中的每一个结点用一个链结点来存放。
9.二叉树的遍历
指按某条搜索路径访问树中的每个结点,使得每个结点均被访问一次且仅被访问一次。
遍历方式一共有四种:主要有先序、中序、后序、层次遍历;
简述前序、中序、后序
叉树的前序遍历递归实现步骤为:判断二义树是否为空,为空则直接返回。先访问根节点。然后递归遍历左子树,然后访问根节点,最后递归遍历右子树。
叉树的中序遍历递归实现步骤为:判断二叉树是否为空,为空则直接返回。先递归遍历左子树,然后访问根节点,最后递归遍历右子树。
二叉树的后序遍历递归实现步骤为:判断二叉树是否为空,为空则直接返回。先递归遍历左子树。然后递归遍历右子树。最后访问根节点。
10.排序算法有哪些?
11.解决哈希冲突的方法
哈希表(也叫散列表),是根据关键码值而直接进行访问的数据结构
1)线性探测法
2)平方探测法
3)伪随机序列法
4)拉链法
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。