C++queue容器介绍

在备考数据结构单元测试的过程中,无意间学到了c++中的姿势。大大的惊喜。原题为SWUST OJ 972题。

统计利用先序遍历创建的二叉树的宽度(0972)

Time limit(ms): 1000

Memory limit(kb): 10000

Submission: 1154

Accepted: 653

Accepted

Description

利用先序递归遍历算法创建二叉树并计算该二叉树的宽度。先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符”#”时表示该结点不需要创建,否则创建该结点。最后再统计创建完成的二叉树的宽度(是指二叉树每层节点数的最大值)。需要注意输入数据序列中的”#”字符和非”#”字符的序列及个数关系,这会最终决定创建的二叉树的形态。

Input

输入为接受键盘输入的由大写英文字符和”#”字符构成的一个字符串(用于创建对应的二叉树)。

Output

输出该用例对应的二叉树的宽度。

Sample Input

1

2

3

4

5

6

A##

ABC####

AB##C##

ABCD###EF##G###

A##B##

Sample Output

1

2

3

4

5

6

1

1

2

3

1

AC源代码:

#include<stdio.h>
#include<stdlib.h>
#include<queue>
#include<iostream>
using namespace std;
#define max(a,b) a>b?a:b

int i;

typedef struct node
      {
          char data;
          struct node *lchild;
          struct node *rchild;
       }BTNode;int main()

{
void CreatTree(BTNode *&t,char str[]); //定义时要指出形参的数据类型,调用时才可以直接在相应位置用名字
int width(BTNode *t);
BTNode *t;
char str[100];
while(scanf("%s",str)!=EOF)
          {
                i=0;
         CreatTree(t,str);
          printf("%d",width(t));
         }
    return 0;
         }
void CreatTree(BTNode *&t,char str[])
{
if(str[i]!=‘#‘)
{
t=(BTNode *)malloc(sizeof(BTNode));
t->data=str[i];
i++;
CreatTree(t->lchild,str);
CreatTree(t->rchild,str);
}
else
{
t=NULL;
i++;
}
}
int width(BTNode *t)
{
if(t==NULL)
return 0;
int mx=0,cnt;
BTNode *p;
queue<BTNode *>queA,queB;                     //queue模板类的定义
queA.push(t);                                      //queue的基本操作之入队,将t元素接到队列的末端
while(!queA.empty())
{
cnt=0;
while(!queA.empty())
{
cnt++;
p=queA.front();
if(p->lchild!=NULL)
queB.push(p->lchild);
if(p->rchild!=NULL)
queB.push(p->rchild);
queA.pop();                                        //出队:如q.pop() 弹出队列的第一个元素,并不会返回元素的值;
}
mx=max(mx,cnt);
queA=queB;
while(!queB.empty())
queB.pop();
}
return mx;
}

涉及的知识:

queue模版类的定义在<queue>头文件中。

queue与stack模版非常类似,queue模版也需要定义两个模版参数,一个是元素类型,一个是容器类型,元素类型是必要的,容器类型是可选的,默认为dqueue类型。

定义queue对象的示例代码如下:

queue<int>q1;

queue<double>q2;

queue的基本操作有:

1.入队:如q.push(x):将x元素接到队列的末端;

2.出队:如q.pop() 弹出队列的第一个元素,并不会返回元素的值;

3,访问队首元素:如q.front()

4,访问队尾元素,如q.back();

5,访问队中的元素个数,如q.size();

时间: 2024-10-04 20:47:09

C++queue容器介绍的相关文章

STL之stack容器和queue容器

摘要:本文主要介绍了两种容器——stack容器和queue容器. 1.基本概念   stack容器 queue容器 容器介绍 stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口, 形式如图所示.stack容器允许新增元素,移除元素,取得栈顶元素,但是除了 最顶端外,没有任何其他方法可以存取stack的其他元素.换言之,stack不允 许有遍历行为. 有元素推入栈的操作称为:push,将元素推出stack的操作称为pop. Queue是一种先进先出(

浅谈C++ STL queue 容器

浅谈C++ STL queue 容器 本篇随笔简单介绍一下\(C++STL\)中\(queue\)容器的使用方法和常见的使用技巧.\(queue\)容器是\(C++STL\)的一种比较基本的容器.我们在学习这个容器的时候,不仅要学到这个容器具体的使用方法,更要从中体会\(C++STL\)的概念. queue容器的概念 \(queue\)在英文中是队列的意思.队列是一种基本的数据结构.而\(C++STL\)中的队列就是把这种数据结构模板化了.我们可以在脑中想象买票时人们站的排队队列.我们发现,在一

STL学习系列五:Queue容器

Queue简介 queue是队列容器,是一种“先进先出”的容器. queue是简单地装饰deque容器而成为另外的一种容器. #include <queue> 1.queue对象的默认构造 queue采用模板类实现,queue对象的默认构造形式:queue<T> queT; 如: queue<int> queInt; //一个存放int的queue容器. queue<float> queFloat; //一个存放float的queue容器. ... //尖括

java 小结2 多态问题和容器介绍

面向对象这个东西,其实我们一直是不是都没有感觉到自己在用,以后我一定要用用.以前学c#时候认真的看过一次,最近一直研究java.随便再看看. 多态问题: 在java中多态分为(1)编译时多态和(2)运行时多态 (1)编译时多态比较容易理解:其实就是通过方法重载,就是方法的重载,同一个函数名但是可以参数不一样.这就是重载(so easy) (2)运行时多态:这个是通过方法覆盖实现的,就是子类在继承父类的时候,通过对某个方法的重写,覆盖父类方法. 简单的说:比如我们有个父类A,子类B通过Extend

Docker 容器介绍

Docker 容器介绍 Docker 是一个基于 Go 语言的开源应用容器引擎,它既能实现虚拟化,又可用于将应用服务打包成轻量.可移植的容器,从而可以发布到任何 Linux 平台.除了优秀了沙箱机制外,Docker 容器的开销也极低. 正如其名,Docker 所做的事情正是以一个集装箱的身份承载应用服务的运行,它与传统的 KVM.Xen 等基于硬件虚拟化的云计算系统不同,而是采用了 LXC (Linux Container) 内核虚拟化的模式,使得应用服务不再需要独立的货轮(OS)为其提供运作环

(C/C++学习)27.STL之queue容器

说明:queue 是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口,queue容器允许从一端新增元素,从另一端移除元素. 注意:Queue 所有元素的进出都必须符合”先进先出”的条件,只有 queue 的顶端元素,才有机会被外界取用.Queue 不提供遍历功能,也不提供迭代器. 1.构造函数 1 queue<T> queT;//queue 对象的默认构造形式 2 queue(const queue &que);//拷贝构造函数 2.存取插入以及删

C++queue容器学习(详解)

一.queue模版类的定义在<queue>头文件中. queue与stack模版非常类似,queue模版也需要定义两个模版参数,一个是元素类型,一个是容器类型,元素类型是必要的,容器类型是可选的,默认为dqueue类型. 定义queue对象的示例代码如下: queue<int>q1; queue<double>q2; queue的基本操作有: 1.入队:如q.push(x):将x元素接到队列的末端: 2.出队:如q.pop() 弹出队列的第一个元素,并不会返回元素的值:

Queue容器

1.Queue (1)定义 queue单向队列与栈有点类似,一个是在同一端存取数据,另一个是在一端存入数据,另一端取出数据.单向队列中的数据是先进先出(First In First Out,FIFO). 在STL中,单向队列也是以别的容器作为底部结构,再将接口改变,使之符合单向队列的特性就可以了.因此实现也是非常方便的. 单向队列一共6个常用函数(front().back().push().pop().empty().size()),与栈的常用函数较为相似. (2)底层实现 与stack 模板类

STL - STL容器介绍

原文地址:http://www.cnblogs.com/duzouzhe/archive/2010/01/12/1645191.html STL的容器可以分为以下几个大类: 一:序列容器    :  vector, list, deque, string. 二 : 关联容器    :  set, multiset, map, mulmap, hash_set, hash_map, hash_multiset, hash_multimap 三: 其他的杂项 : stack, queue, vala