线性结构
1.数组:
内存地址连续存在
为什么数组索引从0开始?
且N就是整个数组包含元素的个数,显得不等式更加优雅
2.链表:内存不必相连
平常说的链表,一般情况下是单向链表
3.列表
4.栈
先进后出的线性表,限定元素只能在栈顶进行插入和删除操作
单调栈:其中的元素满足单调性(从上往下):单调递增(栈底大,栈顶小)、单调递减(栈顶大,栈底小)
5.队列
先进先出
双向队列
优先队列:可以通过O(1)复杂度,删除队列中的最值
6.哈希表
基本排列算法
1.插入排序
2.计数排序
3.冒泡排序
4.选择排序
简答题
1.数组/列表的索引为什么是从0开始的?
这样能够给出更好的不等式,使元素的下标=该元素前面元素的个数 0<=N<10,就表示10个元素,10=10,更优雅,比1<=N<11好
2.数组和链表之间有什么异同点
同: 都是线性结构
异:数组元素所占内存连续,链表元素占内存不连续
3.数组和列表之间有什么异同
列表被称为动态数组,可以随时增大列表的size,这点比数组方便
4. 数组和列表是否存在严格区别
是,pyThon
5.栈的特点?队列的特点
栈:先进后出,栈尾操作;队列:先进先出,队头操作。双向队列两头都能操作
6.你能否用一个双向队列来实现一个栈?
能,在双向队列队尾添加元素,在队尾删除元素
7.优先队列和队列的异同
队列:先进先出
优先队列:可以通过O(1)复杂度,删除队列中的最值
8.哈希表和数组之间的异同点
同:都存在映射关系
异:哈希表是从key映射到value,数组是从索引映射到元素
9.哈希表(map)和哈希集合(set)之间有什么异同点
map存储key和value
set存储key
10.给定一个数组[5,3,8,1,9,6,7,8,2],描述用这个数组构建一个单调递减栈(从栈顶到栈底单调递减)的过程
5进入栈,3<5, 5出栈,3进栈,8>3,8进栈,1<8,1<3,3、8出栈,1进栈,9>1,9进栈,6<9,9出栈,6进栈,7>6,7进栈,8>7,8进栈,2<8,2<7,2<6,2>1,所以 6,7,8出栈 2进栈
最终栈中的数字为2,1