`

STL学习之stack

    博客分类:
  • STL
 
阅读更多

栈(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);
	}
}

 

 

 

  • 大小: 26.6 KB
分享到:
评论

相关推荐

    C++高手之STL学习资料

    STL的学习不仅仅是掌握每个组件的基本用法,更重要的是理解其背后的泛型编程思想和设计模式,这将有助于写出更加高效、可维护的C++代码。对于C++程序员来说,熟练掌握STL是成为高手的重要一步,因为STL的使用能显著...

    stl-stack.h(C++STL stack的源码)

    stl30版本中配接器stack的源码

    c++ -- stl 学习笔记

    这篇学习笔记将深入探讨STL的核心概念、主要组件以及其在实际编程中的应用。 首先,STL的核心概念是容器、迭代器、算法和函数对象。容器是STL提供的一系列数据结构,如vector(动态数组)、list(双向链表)、set...

    STL学习资料

    STL,全称为Standard Template Library(标准模板库),是C++编程语言中的一部分,它包含了一系列高效、可重用的...STL的学习不仅有助于你理解C++的高级特性,还能让你在面对复杂问题时能更好地设计和实现解决方案。

    STL 学习资料STL 学习资料

    STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它提供了高效、可...通过深入学习STL,你可以更好地理解和利用C++的强大力量,从而编写出更加高效、简洁和易于维护的程序。

    心希盼 c++ STL Stack(栈)

    C++ STL(Standard ...在学习和使用过程中,理解Stack的底层实现以及它与不同容器的交互方式是十分重要的,这有助于你优化代码性能和选择适合的实现方式。记得在实践中多做练习,以深入理解和掌握这一数据结构。

    stl的学习:c++ STL

    学习STL时,你需要理解每个组件的工作原理,熟练使用迭代器,掌握常见算法的应用,并学会如何根据问题选择合适的容器和函数对象。通过阅读《STL Programmer's Guide》这样的文档,你可以深入理解STL的内部机制,提升...

    stl模板视频学习教程.rar

    STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它提供了高效、灵活的容器、迭代器、...STL不仅简化了编程,还提高了代码的可读性和可维护性,是C++程序员必备的技能之一。

    STL之stack栈(csdn)————程序.pdf

    STL 之栈(csdn)————程序 STL(Standard Template Library)中的栈(Stack)是一种容器适配器,提供了FILO(先进后出)数据结构的实现。栈是一种 Last-In-First-Out(LIFO)的数据结构,即最后入栈的元素最先...

    三十分钟掌握STL(学习STL,方便编程)

    通过学习STL,我们可以显著提高代码的可读性、可维护性和运行效率。在接下来的内容中,我们将深入探讨STL的主要组件及其用法,让你在三十分钟内对STL有一个全面的认识。 1. 容器 STL中的容器是用来存储和组织数据的...

    C++ STL容器stack和queue详解

    C++ STL(Standard Template Library,标准模板库)提供了两种特殊的线性容器:stack(栈)和queue(队列),它们都是基于顺序容器(如vector或deque)实现的抽象数据类型,用于实现特定的数据操作逻辑。 **1. ...

    stl 学习资料

    《Effective STL》是Scott Meyers的经典之作,书中列举了一系列关于有效使用STL的实践建议。Meyers深入探讨了STL的设计哲学和陷阱,帮助开发者避免常见错误,提高代码的健壮性和性能。书中可能包含了诸如何时使用...

    STL入门 STL入门 STL入门 STL入门 STL入门 STL入门

    1. **迭代器(Iterator)**:迭代器是STL的核心概念之一,它类似于指针,可以用来遍历容器中的元素,提供了类似指针的前移、后移、访问等操作,但功能更加强大,能够支持不同类型的容器。 2. **容器(Container)**:...

    stack-stl.cpp

    stack-stl.cpp

    STL学习资料打包赠送

    本压缩包文件“STL学习资料打包赠送”包含了一系列关于STL的学习资源,旨在帮助程序员深入理解和熟练运用这一强大的工具。 首先,我们要了解STL的核心组成部分: 1. 容器(Containers):STL提供了一系列的数据...

    source-stl.rar_STL 源码_stl source_stl 代码

    5. **适配器**:适配器是一种设计模式,STL中有两种主要类型的适配器:容器适配器(如stack、queue和priority_queue)和迭代器适配器。它们可以将现有的容器或迭代器转换为其他形式,以满足特定需求。 6. **内存...

    C++模板与STL学习

    ### C++模板与STL学习 #### 5.1 使用模板的意义 模板是C++语言的一个强大特性,它允许我们编写能够处理不同数据类型的通用代码。通过使用模板,我们可以减少代码重复并提高代码的可维护性。下面我们将详细介绍模板...

    C++ STL Adaptor stack、queue和vector的使用.doc

    C++ STL Adaptor stack、queue和vector的使用 C++ STL 提供了多种容器类,包括 stack、queue 和vector 等,这些容器类都是基于 Adaptor 模式实现的。下面我们将详细介绍这些容器类的使用方法和常见操作。 Stack ...

    STL源码倚马分析--学习STL

    通过深入学习STL,开发者可以提升代码的效率和可读性。 1. 容器:STL中的容器是存储元素的对象,如vector、list、deque、set、map等。vector是一种动态数组,提供随机访问和快速插入删除尾部元素的能力;list是由...

Global site tag (gtag.js) - Google Analytics