C++queue容器介紹

來源:互聯網
上載者:User

標籤:

在備考資料結構單元測試的過程中,無意間學到了c++中的姿勢。大大的驚喜。原題為SWUST OJ 972題。

 

統計利用先序遍曆建立的二叉樹的寬度 (0972)Time limit(ms): 1000Memory limit(kb): 10000Submission: 1154Accepted: 653Accepted Description

利用先序遞迴遍曆演算法建立二叉樹並計算該二叉樹的寬度。先序遞迴遍曆建立二叉樹的方法為:按照先序遞迴遍曆的思想將對二叉樹結點的抽象訪問具體化為根據接收的資料決定是否產生該結點從而實現建立該二叉樹的二叉鏈表格儲存體結構。約定二叉樹結點資料為單個大寫英文字元。當接收的資料是字元”#”時表示該結點不需要建立,否則建立該結點。最後再統計建立完成的二叉樹的寬度(是指二叉樹每層節點數的最大值)。需要注意輸入資料序列中的”#”字元和非”#”字元的序列及個數關係,這會最終決定建立的二叉樹的形態。

Input

輸入為接受鍵盤輸入的由大寫英文字元和”#”字元構成的一個字串(用於建立對應的二叉樹)。

Output

輸出該用例對應的二叉樹的寬度。

Sample Input
123456 A##ABC####AB##C##ABCD###EF##G###A##B## 
Sample Output
123456 11231 

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

 

C++queue容器介紹

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.