一、数组和链表的区别(很简单,但是很常考,记得要回答全面)
什么是数组:
C++语言中, 可以用数组,处理一组数据类型相同的数据,
不可以动态定义数组的大小(使用前,必须指定大小。 )
在实际应用中,用户使用数组之前,无法确定数组的大小
只能够将数组定义成足够大小,多余出来空间可能不被使用,造成内存空间的浪费。
什么是链表:
链表是一种常见的数据组织形式,他采用动态分配内存的形式实现。
需要时,可以用new分配内存空间
不需要时,用delete将已分配的空间释放
不会造成内存空间的浪费。
从逻辑结构上来看,
数组
数组,必须实现定于固定的长度,
不能适应数据动态增减的情况,
即数组的大小一旦定义就不能改变。
从内存存储的角度看
从访问方式来看
当数据增加时 ,可能超过原先定义的元素的个数;
当数据减少时,造成内存浪费;
数组从栈中分配空间(用new则在堆上创建),
对程序员方便快速,但是自由度小;
数组在内存中是连续的存储,因此可以利用下标索引进行访问;
链表
* 链表动态进行存储分配
* 可以适应数据动态地增减的情况
* 且可以方便地插入、删除数据项。
* 链表从堆中分配空间,自由度大
* 但是申请管理比较麻烦。
链表是链式存储结构,在访问元素时候只能够通过线性方式由前到后顺序的访问,所以访问效率比数组要低。
二、链表的一些操作
如反转,链表存在环路判断,双向链表,循环链表相关操作。
三、队列,栈的应用。(比如对垒在消息队列,站用在递归调用中)
四、二叉树
那种遍历方式及其递归和非递归实现,三种遍历方式的主要应用(后缀表达式),相关的时间复杂度。
五、字符串相关
整型,浮点型和字符串的转换(atoi,atof,itoa)
字符串拷贝注意异常检查,比如空指针,字符串重叠,自赋值,字符串结束符‘\0’等。
六、关于数组 vs 链表,描述错误的是?
A、 数组的大小固定,而链表则天然支持动态扩容
B、 数组使用的是连续内存空间对 CPU 的缓存机制友好,链表则相反
C、 链表随机访问数据性能优于数组
D、 数组支持随机访问,而链表不支持。