栈(statck)这种数据结构在计算机中是相当出名的。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。因此实现非常的方便。下面就给出栈的函数列表和VS2008中栈的源代码,在STL中栈一共就5个常用操作函数(top()、push()、pop()、 size()、empty() ),很好记的。
可以看出,由于栈只是进一步封装别的数据结构,并提供自己的接口,所以代码非常简洁,如果不指定容器,默认是用deque来作为其底层数据结构的(对deque不是很了解?可以参阅《STL系列之一 deque双向队列》)。下面给出栈的使用范例:
//栈 stack支持 empty() size() top() push() pop() // by MoreWindows(http://blog.csdn.net/MoreWindows) #include <stack> #include <vector> #include <list> #include <cstdio> using namespace std; int main() { //可以使用list或vector作为栈的容器,默认是使用deque的。 stack<int, list<int>> a; stack<int, vector<int>> b; int i; //压入数据 for (i = 0; i < 10; i++) { a.push(i); b.push(i); } //栈的大小 printf("%d %d\n", a.size(), b.size()); //取栈项数据并将数据弹出栈 while (!a.empty()) { printf("%d ", a.top()); a.pop(); } putchar('\n'); while (!b.empty()) { printf("%d ", b.top()); b.pop(); } putchar('\n'); return 0; }
关于stack在面试中的运用可以有以下题目:
题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
代码如下:
#include <iostream> using namespace std; struct node { int data; node *next }; void ptintlist(node *head) { stack<node *> nodes; node *p=head; while (p!=NULL) { nodes.push(p); p=p->next; } while (!nodes.empty()) { p=nodes.top(); cout<<p->data; nodes.pop(); } }
以上内容转之“http://blog.csdn.net/morewindows/article/details/6950881
另外一种关于递归的解法如下:
void PrintListReversely(ListNode* pListHead) { if(pListHead != NULL) { // Print the next node first if (pListHead->m_pNext != NULL) { PrintListReversely(pListHead->m_pNext); } // Print this node printf("%d", pListHead->m_nKey); } }
相关推荐
STL的学习不仅仅是掌握每个组件的基本用法,更重要的是理解其背后的泛型编程思想和设计模式,这将有助于写出更加高效、可维护的C++代码。对于C++程序员来说,熟练掌握STL是成为高手的重要一步,因为STL的使用能显著...
stl30版本中配接器stack的源码
这篇学习笔记将深入探讨STL的核心概念、主要组件以及其在实际编程中的应用。 首先,STL的核心概念是容器、迭代器、算法和函数对象。容器是STL提供的一系列数据结构,如vector(动态数组)、list(双向链表)、set...
STL,全称为Standard Template Library(标准模板库),是C++编程语言中的一部分,它包含了一系列高效、可重用的...STL的学习不仅有助于你理解C++的高级特性,还能让你在面对复杂问题时能更好地设计和实现解决方案。
STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它提供了高效、可...通过深入学习STL,你可以更好地理解和利用C++的强大力量,从而编写出更加高效、简洁和易于维护的程序。
C++ STL(Standard ...在学习和使用过程中,理解Stack的底层实现以及它与不同容器的交互方式是十分重要的,这有助于你优化代码性能和选择适合的实现方式。记得在实践中多做练习,以深入理解和掌握这一数据结构。
学习STL时,你需要理解每个组件的工作原理,熟练使用迭代器,掌握常见算法的应用,并学会如何根据问题选择合适的容器和函数对象。通过阅读《STL Programmer's Guide》这样的文档,你可以深入理解STL的内部机制,提升...
STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它提供了高效、灵活的容器、迭代器、...STL不仅简化了编程,还提高了代码的可读性和可维护性,是C++程序员必备的技能之一。
STL 之栈(csdn)————程序 STL(Standard Template Library)中的栈(Stack)是一种容器适配器,提供了FILO(先进后出)数据结构的实现。栈是一种 Last-In-First-Out(LIFO)的数据结构,即最后入栈的元素最先...
通过学习STL,我们可以显著提高代码的可读性、可维护性和运行效率。在接下来的内容中,我们将深入探讨STL的主要组件及其用法,让你在三十分钟内对STL有一个全面的认识。 1. 容器 STL中的容器是用来存储和组织数据的...
C++ STL(Standard Template Library,标准模板库)提供了两种特殊的线性容器:stack(栈)和queue(队列),它们都是基于顺序容器(如vector或deque)实现的抽象数据类型,用于实现特定的数据操作逻辑。 **1. ...
《Effective STL》是Scott Meyers的经典之作,书中列举了一系列关于有效使用STL的实践建议。Meyers深入探讨了STL的设计哲学和陷阱,帮助开发者避免常见错误,提高代码的健壮性和性能。书中可能包含了诸如何时使用...
1. **迭代器(Iterator)**:迭代器是STL的核心概念之一,它类似于指针,可以用来遍历容器中的元素,提供了类似指针的前移、后移、访问等操作,但功能更加强大,能够支持不同类型的容器。 2. **容器(Container)**:...
stack-stl.cpp
本压缩包文件“STL学习资料打包赠送”包含了一系列关于STL的学习资源,旨在帮助程序员深入理解和熟练运用这一强大的工具。 首先,我们要了解STL的核心组成部分: 1. 容器(Containers):STL提供了一系列的数据...
5. **适配器**:适配器是一种设计模式,STL中有两种主要类型的适配器:容器适配器(如stack、queue和priority_queue)和迭代器适配器。它们可以将现有的容器或迭代器转换为其他形式,以满足特定需求。 6. **内存...
### C++模板与STL学习 #### 5.1 使用模板的意义 模板是C++语言的一个强大特性,它允许我们编写能够处理不同数据类型的通用代码。通过使用模板,我们可以减少代码重复并提高代码的可维护性。下面我们将详细介绍模板...
C++ STL Adaptor stack、queue和vector的使用 C++ STL 提供了多种容器类,包括 stack、queue 和vector 等,这些容器类都是基于 Adaptor 模式实现的。下面我们将详细介绍这些容器类的使用方法和常见操作。 Stack ...
通过深入学习STL,开发者可以提升代码的效率和可读性。 1. 容器:STL中的容器是存储元素的对象,如vector、list、deque、set、map等。vector是一种动态数组,提供随机访问和快速插入删除尾部元素的能力;list是由...