欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > day38-栈和队列理论学习【c++】

day38-栈和队列理论学习【c++】

2025/6/23 8:09:09 来源:https://blog.csdn.net/canGfly/article/details/141405128  浏览:    关键词:day38-栈和队列理论学习【c++】

day38-栈和队列理论学习【c++】

在 C++ 中,栈(Stack)和队列(Queue)是两种常见的数据结构,它们分别以不同的方式管理数据。下面是对它们的详细讲解,包括操作和代码实现。

栈(Stack)

定义:
栈是一种遵循“后进先出”(LIFO,Last In First Out)原则的数据结构。即,最新加入的元素最先被移除。

主要操作:

  1. push(): 将一个元素添加到栈顶。
  2. pop(): 移除栈顶的元素。
  3. top(): 获取栈顶的元素但不移除它。
  4. empty(): 判断栈是否为空。

C++ STL 中的栈实现:
在 C++ 标准模板库(STL)中,栈是通过 std::stack 实现的。默认情况下,它使用 std::deque 作为底层容器,但也可以使用 std::vectorstd::list

代码示例:

#include <iostream>
#include <stack>int main() {std::stack<int> s;  // 创建一个空栈s.push(1);  // 将 1 压入栈中s.push(2);  // 将 2 压入栈中s.push(3);  // 将 3 压入栈中std::cout << "栈顶元素: " << s.top() << std::endl;  // 输出 3s.pop();  // 移除栈顶元素 (3)std::cout << "栈顶元素: " << s.top() << std::endl;  // 输出 2std::cout << "栈是否为空: " << (s.empty() ? "是" : "否") << std::endl;  // 输出 否return 0;
}

队列(Queue)

定义:
队列是一种遵循“先进先出”(FIFO,First In First Out)原则的数据结构。即,最早加入的元素最先被移除。

主要操作:

  1. enqueue()push(): 将一个元素添加到队列的尾部。
  2. dequeue()pop(): 从队列的头部移除元素。
  3. front(): 获取队列头部的元素但不移除它。
  4. back(): 获取队列尾部的元素但不移除它。
  5. empty(): 判断队列是否为空。

C++ STL 中的队列实现:
在 C++ 标准模板库(STL)中,队列是通过 std::queue 实现的。默认情况下,它使用 std::deque 作为底层容器,但也可以使用 std::list

代码示例:

#include <iostream>
#include <queue>int main() {std::queue<int> q;  // 创建一个空队列q.push(1);  // 将 1 添加到队列中q.push(2);  // 将 2 添加到队列中q.push(3);  // 将 3 添加到队列中std::cout << "队列头部元素: " << q.front() << std::endl;  // 输出 1q.pop();  // 移除队列头部元素 (1)std::cout << "队列头部元素: " << q.front() << std::endl;  // 输出 2std::cout << "队列是否为空: " << (q.empty() ? "是" : "否") << std::endl;  // 输出 否return 0;
}

总结

  • 栈(Stack): 遵循 LIFO 原则,支持的操作有 pushpoptopempty
  • 队列(Queue): 遵循 FIFO 原则,支持的操作有 pushpopfrontbackempty

这两种数据结构在许多算法和程序设计中都有广泛的应用,可以根据具体需要选择使用。


peek()操作

在数据结构中,peek() 是一种操作,用于访问(但不移除)数据结构中的元素。在不同的数据结构中,peek() 可能会有不同的具体含义。以下是 peek() 在一些常见数据结构中的使用说明:

1. 栈(Stack)

在栈中,peek() 通常用来访问栈顶的元素,而不改变栈的状态。它的行为类似于 top() 操作。

例子:

#include <iostream>
#include <stack>int main() {std::stack<int> s;s.push(1);s.push(2);s.push(3);std::cout << "栈顶元素: " << s.top() << std::endl;  // 使用 top(),类似于 peek()return 0;
}
2. 队列(Queue)

在队列中,peek() 通常用来访问队列头部的元素,而不改变队列的状态。它的行为类似于 front() 操作。

例子:

#include <iostream>
#include <queue>int main() {std::queue<int> q;q.push(1);q.push(2);q.push(3);std::cout << "队列头部元素: " << q.front() << std::endl;  // 使用 front(),类似于 peek()return 0;
}
3. 优先队列(Priority Queue)

在优先队列中,peek() 用于访问优先队列中优先级最高的元素(通常是队列的顶部元素),而不移除它。它的行为类似于 top() 操作。

例子:

#include <iostream>
#include <queue>int main() {std::priority_queue<int> pq;pq.push(1);pq.push(5);pq.push(3);std::cout << "优先队列的最大元素: " << pq.top() << std::endl;  // 使用 top(),类似于 peek()return 0;
}
总结
  • : peek() 相当于 top(),访问栈顶元素。
  • 队列: peek() 相当于 front(),访问队列头部元素。
  • 优先队列: peek() 相当于 top(),访问优先队列中优先级最高的元素。

在标准库中,peek() 并不是一个特定的函数名,而是一个通用的术语,用来描述访问数据结构中不移除元素的操作。在不同的数据结构中,它的具体函数名称可能会有所不同。


ok了,就到这里叭~~~

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词