1. 程式人生 > 其它 >C++STL常用操作之queue篇

C++STL常用操作之queue篇

技術標籤:STLSTL簡單使用快速上手二叉樹佇列二叉樹資料結構演算法

STL常用操作之queue篇


簡介:

佇列,其特點是first in first out(先進先出),從對頭出隊,從隊尾入隊。

這裡可以和stack做一些比較

#include<queue>

在這裡插入圖片描述

佇列對於某些問題的處理也是很方便的,比如廣度優先搜尋,這個我們在文章末尾給出一道簡單的題目,大家可以試試。

1.構造

queue<int> qq;
qq.push(2);			//整形資料2入隊
qq.push(3);			//整形資料3入隊

此時佇列qq如圖所示:
在這裡插入圖片描述

2.常用函式

qq.push(3);
//整形資料3入隊 cout << qq.front(); //輸出佇列的對頭元素 qq.pop(); //將對頭元素出隊 int length = qq.size(); //返回值為佇列的長度 if(qq.empty()); //bool型別,判斷佇列是否為空

3.應用

這裡列舉一個二叉樹層次遍歷的問題。

問題描述

編一個程式,讀入使用者輸入的一串先序遍歷字串,根據此字串建立一個二叉樹。例如如下的先序遍歷字串:ABC##DE#G##F### ,其中“#”表示的是空格,空格字元代表空樹。建立起此二叉樹以後,再對二叉樹進行層序遍歷,輸出遍歷結果。

輸入形式

輸入包括1行字串,長度不超過100。

輸出形式

可能有多組測試資料,對於每組資料,每個字元後面都有一個空格,每個輸出結果佔一行。

樣例輸入

abc##de#g##f###

樣例輸出

a b c d e f g

#include<iostream>
#include<queue>
using namespace std;
struct bi_tree_node {
	char data;				//資料域
	bi_tree_node* left;		//左孩子
	bi_tree_node* right;	//右孩子
};
//二叉樹的節點
bi_tree_node* build() {
	char data;
	cin >>
data; bi_tree_node* r = new bi_tree_node; if (data == '#') r = NULL; //如果輸入的字元為#,則為空 else { r->data = data; r->left = build(); r->right = build(); } //否則,繼續遞迴構造它的左子樹和右子樹 return r; } //構造二叉樹 void bfs(bi_tree_node* root) { queue<bi_tree_node*> qq; qq.push(root); while (!qq.empty()) { root = qq.front(); qq.pop(); cout << root->data; //彈出根節點並且輸出 if (root->left != NULL) qq.push(root->left); //如果左子樹不為空,則將左子樹的根節點入隊 if (root->right != NULL) qq.push(root->right); //右子樹同上 } } //廣度優先搜尋完成二叉樹的層次遍歷 int main() { bi_tree_node* root = build(); bfs(root); return 0; }

執行結果:
在這裡插入圖片描述

這個題目的寫法是根據前序遍歷構建二叉樹,build函式也就是遞迴,這裡可以和之前stack篇中提到的遞迴相結合起來學習。


另外,基本瞭解廣搜原理過後也可以開始上手類似於低階版“抓奶牛”的題目。

queue簡單使用,適用於像我這樣的小白快速上手,大神請鍵下留情!

發現問題歡迎指正!

希望能幫助到你!不懂留言!