返回
走进栈、堆、队列的世界:程序员的面试秘籍
前端
2024-01-31 17:59:42
一、栈:后进先出的数据结构
栈是一种遵循后进先出(LIFO) 原则的有序集合。新添加和待删除的数据都保存在栈的同一端,称为栈顶,另一端则称为栈底。栈通常用于模拟函数调用或管理内存空间。
1. 栈的特点
- 后进先出(LIFO):新数据总是被压入栈顶,而旧数据则从栈顶弹出。
- 栈顶操作:栈顶操作包括压栈(push)和弹栈(pop)。压栈是指将新数据压入栈顶,而弹栈是指从栈顶弹出旧数据。
- 栈底操作:栈底操作包括窥栈(peek)和清空栈(clear)。窥栈是指查看栈顶数据但不弹出,而清空栈是指将栈中的所有数据全部删除。
2. 栈的应用场景
- 函数调用:栈在函数调用中发挥着重要作用。当一个函数被调用时,它会在栈中创建一个新的栈帧,用于存储函数的局部变量和参数。当函数执行完毕后,栈帧会被销毁,从而释放内存空间。
- 内存管理:栈还可以用于管理内存空间。在某些编程语言中,栈被用于存储程序的局部变量和临时数据,而堆则被用于存储程序的全局变量和动态分配的数据。
二、堆:先进先出的数据结构
堆是一种遵循先进先出(FIFO) 原则的有序集合。新添加的数据被保存在队列的一端,称为队头,而旧数据则从另一端删除,称为队尾。队列通常用于处理等待处理的任务或消息。
1. 堆的特点
- 先进先出(FIFO):新数据总是被加入队尾,而旧数据则从队头移除。
- 队头操作:队头操作包括入队(enqueue)和出队(dequeue)。入队是指将新数据加入队尾,而出队是指从队头移除旧数据。
- 队尾操作:队尾操作包括窥队(peek)和清空队列(clear)。窥队是指查看队头数据但不移除,而清空队列是指将队列中的所有数据全部删除。
2. 堆的应用场景
- 任务处理:队列在任务处理中发挥着重要作用。例如,在操作系统中,队列被用于管理等待执行的任务。当一个任务需要被执行时,它会被加入队列的队尾,而当轮到它执行时,它会被从队头移除。
- 消息传递:队列还可以用于消息传递。例如,在网络通信中,队列被用于存储要发送的消息。当消息需要被发送时,它会被加入队列的队尾,而当它被发送成功后,它会被从队头移除。
三、队列:灵活多样的数据结构
队列是一种遵循后进先出(LIFO) 和先进先出(FIFO) 原则的有序集合。它可以同时支持压栈和弹栈操作,也可以同时支持入队和出队操作。队列通常用于模拟函数调用或管理内存空间。
1. 队列的特点
- 双端操作:队列既支持压栈和弹栈操作,也支持入队和出队操作。
- 队列顶操作:队列顶操作包括入队(enqueue)和出队(dequeue)。入队是指将新数据加入队尾,而出队是指从队头移除旧数据。
- 队列底操作:队列底操作包括窥队(peek)和清空队列(clear)。窥队是指查看队头数据但不移除,而清空队列是指将队列中的所有数据全部删除。
2. 队列的应用场景
- 函数调用:队列在函数调用中发挥着重要作用。当一个函数被调用时,它会在队列中创建一个新的栈帧,用于存储函数的局部变量和参数。当函数执行完毕后,栈帧会被销毁,从而释放内存空间。
- 内存管理:队列还可以用于管理内存空间。在某些编程语言中,队列被用于存储程序的局部变量和临时数据,而堆则被用于存储程序的全局变量和动态分配的数据。