栈与队列
一,栈:
栈的特点:先进后出,仅允许在表的一端进行插入和删除运算
列表实现栈:
参考地址:https://blog.csdn.net/zhisuihen6347/article/details/84445813
列表使用append在最后添加新元素,使用pop移除最后一位元素
思想理解:
在使用列表实现栈中,因为每次append增加元素时,会导致列表中底层数值可能发生位置移动导致效率低下,其中一个解决办法就是先默认一个值为None的列表长度n,当栈满时,再将列表长度扩大为n*2,当栈元素被移除,所占用栈内存小于原有列表长度的1/4时,将列表长度缩小成n/2
二,队列
队列特点:先进先出,只允许在表的前端进行删除操作,而在表的后端进行插入操作
列表实现栈:
https://blog.csdn.net/zhisuihen6347/article/details/84480622
思想理解:
因为简单使用append后端增加元素,pop(0)移除前端元素效率不高,也是因为列表元素位置移动以及内存占用原因,针对这个问题的方法:
我们可以循环使用数组来解决:假设默认队列大小为N NN(索引为0−N−1 0-N-10−N−1),并设_front为队列第一个元素的索引,_size为当前队列的大小。
入队列操作:给索引为(_front+_size)%N NN赋值;
出队列操作:给索引为_front赋值为None,并且第一个元素的索引后移一位:(_front+1)%N NN
自己理解
链表和列表数组分别实现栈和队列对比 :
链表实现栈和队列没太明白
https://blog.csdn.net/submarineas/article/details/84996360