栈与队列总结

灵魂四问:

  1. python/Java中stack,queue 是容器么?
  2. 我们使用的stack,queue是属于那个版本的STL?
  3. 我们使用的stack,queue是如何实现的?
  4. stack,queue 提供迭代器来遍历空间么?

1.python/Java中stack,queue 是容器么?

无论是在Python还是Java中,stack和queue都可以作为容器来存储和管理数据。它们提供了特定的操作,以便按照特定的顺序处理数据。

  1. queue 是一种容器适配器,专门设计用于在FIFO上下文中(先进先出)操作,其中元素从容器的一端插入并从另一端提取.
  2. 栈是一种容器适配器,专门设计用于在LIFO上下文中(后进先出)操作,其中元素仅从容器的一端插入和提取。

stacks 被实现为容器适配器,它是使用特定容器类的封装对象作为其底层容器的类,提供一组特定的成员函数来访问其元素。从特定容器的“后面” 送入 / 弹出元素,该容器称为栈的顶部(top)。

底层容器可以是任何标准容器类模板或一些其他专门设计的容器类。容器应支持以下操作:

  • empty
  • size
  • back
  • push_back
  • pop_back

2和3.我们使用的stack,queue是属于那个版本的STL?stack,queue是如何实现的?

STL(Standard Template Library)是C++标准库中的一个重要组成部分,提供了许多通用的数据结构和算法。然而,Python和Java中的stack和queue并不直接属于STL。

  • Python中的stack和queue:在Python中,stack和queue并不是STL的一部分。Python提供了内置的数据类型列表(list),可以方便地实现栈和队列的功能。通过使用列表的append()和pop()方法,可以模拟栈的操作。而使用列表和collections模块中的deque类,可以实现队列的功能。

  • Java中的stack和queue:Java的标准库中包含了一个java.util包,其中提供了Stack类和Queue接口,用于实现栈和队列的功能。这些类和接口并非直接属于STL,而是Java的标准库提供的数据结构和算法。

4.stack,queue 提供迭代器来遍历空间么?

在Java中,stack和queue提供了迭代器来遍历其中的元素。

栈中所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)

队列只允许在表的一端插入,在另一端删除,允许插入的一端叫做队尾,允许删除的一端叫做队头,是一种先进先出线性表。queue不提供遍历功能,也不提供迭代器。

在Python中,可以使用`for`循环来迭代遍历stack和queue中的元素。对于栈(stack),可以直接使用列表(list)对象进行迭代。对于队列(queue),可以使用collections模块中的deque类,并通过`for`循环迭代遍历。

# 遍历栈(stack)  
stack = [1, 2, 3, 4, 5]  
for item in stack:  
    print(item)  
  
# 遍历队列(queue)  
from collections import deque  
queue = deque([1, 2, 3, 4, 5])  
for item in queue:  
    print(item) 

在Java中,可以使用迭代器(Iterator)来遍历stack和queue中的元素。Stack类和Queue接口都提供了iterator()方法,返回一个迭代器对象,可以使用`while`循环和`hasNext()`方法来遍历元素。

以下是Java中使用迭代器遍历栈和队列的示例代码:

// 遍历栈(stack)  
import java.util.Stack;  
Stack stack = new Stack<>();  
stack.push(1);  
stack.push(2);  
stack.push(3);  
while (!stack.isEmpty()) {  
    int item = stack.pop();  
    System.out.println(item);  
}  
  
// 遍历队列(queue)  
import java.util.Queue;  
import java.util.LinkedList;  
Queue queue = new LinkedList<>();  
queue.add(1);  
queue.add(2);  
queue.add(3);  
while (!queue.isEmpty()) {  
    int item = queue.poll();  
    System.out.println(item);  
}  

可以出一道面试题:栈里面的元素在内存中是连续分布的么?

Python中的栈:在Python中,栈的实现是基于列表(list)数据类型。列表是一种动态数组,它在内存中以连续的块存储元素。当列表中的元素数量超过当前分配的内存空间时,Python会自动重新分配更大的内存块,并将现有元素复制到新的内存空间中。这意味着列表中的元素在内存中的分布是动态变化的,不一定是连续的。

Java中的栈:在Java中,栈是通过堆栈帧(stack frame)的方式实现的。每当调用一个方法时,Java虚拟机都会创建一个堆栈帧,用于存储该方法的局部变量、参数和返回地址等信息。堆栈帧在内存中以链式结构的形式存在,而不是连续分布的。当方法执行完毕后,相应的堆栈帧会被销毁,释放内存空间。

栈和队列的应用

代码随想录 (programmercarl.com)

你可能感兴趣的:(#,5.栈与队列,java,开发语言)