大家好呀,我是不会写开场白的帅蛋。
今天直入重点,玩儿栈和队列,英文名 Stack and Queue,线性数据结构的典型代表,数组和链表的兄弟姐妹。
下面,让我们来看看,它们是有多简单。
栈
栈是一种后进先出(Last in First Out)的数据结构,简称 LIFO。
啥叫后进先出呢?这就和打飞机,呃,打手枪一样,弹夹中最先插进去的子弹最后才打出去,越晚摁进去的子弹越早打出来。
别小看它,栈是一种很重要的编程概念,它在软件应用中很常见。我们每天都用到的浏览器就用到了,浏览器的“后退”按钮。
比如臭宝上班的时候正在浏览器上看**@编程文青李狗蛋**的技术文,此时弹出一个保持男性持久的框框,“不小心”点到了,正看的入迷的时候你的老大路过,此时拿出单身 N 年的手速点击后退,你老大一看你在看帅蛋的文章,赞赏你是积极上进的员工,奖励手纸一卷。
看,“后退”是多么的有用~
栈的定义
那么,到底怎么定义栈呢?
很简单。
栈是限制仅在表的一端(表尾)进行操作(插入和删除)的线性表。
表尾又叫栈顶(Top),允许插入和删除,那么另一端就叫做栈底(Bottom),啥也不能干,只能干等着第一个进栈的过来躺着。
栈的插入操作,叫做入栈(push)。存入栈的元素之间没有任何具体的关系,只有到来的时间的先后顺序。
入栈操作涉及的单个数据的进入,所以时间复杂度为 O(1),同时入栈过程中只需要单个的临时存储空间,所以空间复杂度为 O(1)。
栈的删除操作,叫做出栈(pop)。删完了,也就是栈底就是栈顶的时候,就叫空栈。
同理,出栈操作涉及个别数据的出去且出栈过程只需要单个的临时存储空间,所以时间复杂度和空间复杂度都为 O(1)。