栈:是一种特殊的线性集合,对栈的操作都在栈顶【加入数据push,移除数据pop】并且是后进先出的【例如:网页的前进与后退】。
栈分类:实现结构可以是一维数组,链表;当为数组时则为顺序栈,当为链表时则为链式栈。
时间复杂度:假设栈中有n个元素
访问指定位置时,时间复杂度为O(n)
入栈和出栈的时间复杂度为O(1)
栈的常见应用场景:
浏览器的前进与后退
虚拟机栈:由栈帧组成,每个栈帧都拥有:局部变量表,操作数栈,动态链接,方法出口信息。
出栈的顺序:
3个元素A,B,C顺序出栈,出栈的情况可分为:
队列:是一种线性结构【隧道里面的行驶车辆】先入先出。
队列的出口端叫做队头,则入口端叫做队尾,队列只允许在队头进行出队操作;在队尾进行入队操作。
队列的分类:单队列,循环队列。
时间复杂度:假设队列中有n个元素
访问指定元素的时间复杂度O(n)
插入删除元素的时间复杂度O(1)
数组实现的队列叫做顺序队列;链表实现的队列叫做链式队列。
使用循环队列可以避免假溢出。
队列的应用场景:
KTV点歌列表
阻塞队列
线程池的任务队列