目录
栈
一 栈的概念及结构
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据也在栈顶。
(方便理解,下面贴个图)
二 栈的实现思路
栈的实现可以用数组或者链表完成,而相对于链表,数组更适合用来实现栈。
由于是在栈顶实现,可供选择的方式有两种:
一种是将栈顶当作数组的尾部,直接在数组尾部进行增删即可实现,
另一种则是将栈顶看作链表的头部,通过对链表的头插头删来实现栈;
由于顺序表在尾部插入数据的代价比链表于头部插入的代价小,故而选择顺序表完成栈的实现。
队列
一 队列的概念及结构
队列是一种特殊的线性表,与栈正好相反,它是在一端插入,另一端删除。进行数据插入的一端 称为队尾, 进行删除操作的一端 称为队头。队列中的数据元素遵守后进后出LILO(Last In Last Out)的原则。
(同上,贴出图片方便理解)
二 队列的实现思路
与栈同入同出不同,队列是一端进一端出的结构。所以要想实现队列,数组则没有链表来的高效,
所以通常使用链表来实现队列。
当我们使用单链表来实现队列时,由于需要头删尾插,所以需要额外定义一个头指针head,一个尾指针tail 和一个记录链表大小的整形size。
头指针用来帮助我们找到队头进行出队,尾指针用来帮助我们实现入队,size则帮助我们判断队列是否为空,防止我们为空时进行出队导致出错。
简单了解栈和队列的题目
好记性不如烂笔头,而光看知识点也不如上手敲几段代码理解的快。
下面是一些可以帮助理解的关于栈和队列的题目,感兴趣可以自行尝试。
1. 括号匹配问题。力扣
2. 用队列实现栈。力扣
3. 用栈实现队列。力扣
4. 设计循环队列。力扣