最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++二叉樹(shù)的創(chuàng)建及遍歷詳情

 更新時(shí)間:2022年07月22日 11:55:14   作者:樂(lè)十九  
這篇文章主要介紹了C++二叉樹(shù)的創(chuàng)建及遍歷詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助

樹(shù)的定義

什么是樹(shù)?

假如給我們一棵二叉樹(shù)的前序遍歷和中序遍歷結(jié)果,我們應(yīng)該如何通過(guò)這兩個(gè)遍歷結(jié)果創(chuàng)建一棵樹(shù)呢?

通過(guò)前序遍歷的結(jié)果我們可以找到二叉樹(shù)的根節(jié)點(diǎn),那么既然有了二叉樹(shù)的根節(jié)點(diǎn),我們?cè)诳粗行虮闅v,在中序遍歷中找到二叉樹(shù)的根節(jié)點(diǎn),呢么根節(jié)點(diǎn)之前的所有節(jié)點(diǎn)就是二叉樹(shù)的左子樹(shù)了,根節(jié)點(diǎn)之后的所有節(jié)點(diǎn)就是二叉樹(shù)的右子樹(shù)了。由此就可以對(duì)遍歷結(jié)果進(jìn)行分割了。

既然已經(jīng)得到了左子樹(shù)和右子樹(shù)就好辦了,我們知道二叉樹(shù)的左子樹(shù)和右子樹(shù)也可以看作是一棵二叉樹(shù),此時(shí)二叉樹(shù)的規(guī)模變小的了,但還是符合前序遍歷和中序遍歷的結(jié)果,所以可以對(duì)左右子樹(shù)在分別進(jìn)行創(chuàng)建。

偽代碼表示:

BtNode* BuyNode()
{
    BtNode* s = (BtNode*)malloc(sizeof(BtNode));
    if(s == nullptr) return nullptr;
    memset(s,0,sizeof(BtNode));
    return s;
}
int FindPos(char* in,int n,char a)
{
    int pos  = -1;
    for(int i =0;i<n;++i)
    {
        if(in[i] == a)
        {
            pos = i;
            break;
        }
    }
    return pos;
}

BinaryTree CreateBinaryTree(char* Pre,char* in,int n)
{
    //首先我們需要購(gòu)買(mǎi)一個(gè)節(jié)點(diǎn),讓其作為根節(jié)點(diǎn),所以就需要一個(gè)購(gòu)買(mǎi)節(jié)點(diǎn)函數(shù)
    BtNode* root = BuyNode();//購(gòu)買(mǎi)節(jié)點(diǎn)
    root->value = pre[0];
    //要想構(gòu)建二叉樹(shù),我們還需要在中序遍歷中找到根節(jié)點(diǎn)的位置,從而確定左右子樹(shù),所以還需要一個(gè)查找函數(shù),返回值是根節(jié)點(diǎn)的位置pos
    int pos = FindPos(in,n,pre[0]);//在中序遍歷中查找pre[0]的位置,如果沒(méi)有找到,說(shuō)明兩個(gè)遍歷結(jié)果不是一棵二叉樹(shù),直接退出
    if(pos == -1) exit(0);
    //此時(shí)我們已經(jīng)有了新的左子樹(shù)和右子樹(shù),分別來(lái)創(chuàng)建
    CreateBinaryTree(左子樹(shù)的前序遍歷結(jié)果,左子樹(shù)的中序遍歷結(jié)果,左子樹(shù)的大小);//創(chuàng)建左子樹(shù)
    CreateBinaryTree(右子樹(shù)的前序遍歷結(jié)果,右子樹(shù)的中序遍歷結(jié)果,右子樹(shù)的大小);//創(chuàng)建右子樹(shù)
}
//pre 表示前序遍歷數(shù)組,in表示中序遍歷數(shù)組,n表示節(jié)點(diǎn)的個(gè)數(shù)
BinaryTree CreateBtree(char* Pre,char* in)
{
    int n = sizeof(pre)/sizeof(pre[0]);
    if(pre==nullptr||in==nullptr||n<=0)
    {
        return nullptr;//不滿足以上條件說(shuō)明不存在該二叉樹(shù),直接返回空指針
    }
    CreateBinaryTree(pre,in,n);//開(kāi)始創(chuàng)建
}

構(gòu)建二叉樹(shù)以及使用遞歸方式前中后序遍歷完整代碼如下:

#include<iostream>
#include<stack>
#include<queue>
#include<memory>
/*
*二叉樹(shù)的存儲(chǔ)方式有兩種,一種是以鏈表的方式進(jìn)行存儲(chǔ),一種是以數(shù)組的方式進(jìn)行存儲(chǔ)
* 當(dāng)以數(shù)組的方式進(jìn)行存儲(chǔ)的時(shí)候,要注意節(jié)點(diǎn)之間的關(guān)系,假設(shè)根節(jié)點(diǎn)的位置為POS那么左子樹(shù)的位置就是
* 2*POS+1,右子樹(shù)的位置就是2*POS+2。正是由于這層關(guān)系,當(dāng)二叉樹(shù)不是滿二叉樹(shù)的時(shí)候,使用數(shù)組進(jìn)行存儲(chǔ)
* 是非常的浪費(fèi)空間的,空間的利用率較低。
* 當(dāng)以鏈表的方式存儲(chǔ)二叉樹(shù)的時(shí)候,每一個(gè)二叉樹(shù)節(jié)點(diǎn)都含有一個(gè)左孩子指針和一個(gè)右孩子指針,兩個(gè)指針?lè)謩e
* 指向相應(yīng)的節(jié)點(diǎn),節(jié)省空間,并且更容易使用。
*/
using namespace std;
typedef char ElemType;
typedef struct BtNode
{
	ElemType value;
	BtNode* leftchild;
	BtNode* rightchild;
}BtNode,*BinaryTree;
BtNode* BuyNode()
{
	BtNode* s = (BtNode*)malloc(sizeof(BtNode));
	if (s == NULL)return nullptr;
	memset(s, 0, sizeof(BtNode));
	return s;
}
int FindPos(ElemType* In, int n, ElemType val)
{
	int pos = -1;
	for (int i = 0; i < n ; ++i)
	{
		if (In[i] == val)
		{
			pos = i;
			break;
		}
	}
	return pos;
}
BinaryTree CreateBinTree(ElemType* Pr, ElemType* In, int n)
{
	BtNode* s = nullptr;
	if (n >= 1)
	{
		s = BuyNode();
		s->value = Pr[0];
		int pos = FindPos(In, n, Pr[0]);
		if (pos == -1) exit(0);

		s->leftchild = CreateBinTree(Pr + 1, In, pos);
		s->rightchild = CreateBinTree(Pr + pos + 1, In + pos + 1, n - pos - 1);
	}
	return s;
}
//通過(guò)前中序數(shù)組創(chuàng)建二叉樹(shù)
BinaryTree CreateBinaryTree(ElemType* Pr, ElemType* In)
{
	int n = strlen(Pr);
	if (Pr == nullptr || In == nullptr)
	{
		return nullptr;
	}
	else
		return CreateBinTree(Pr, In, n);
}
BinaryTree CreateLI(ElemType* Li, ElemType* In, int n)
{
	BtNode* s = nullptr;
	if (n >= 1)
	{
		s = BuyNode();
		s->value = Li[n - 1];//后序遍歷的最后一位數(shù)據(jù)是根節(jié)點(diǎn)
		int pos = FindPos(In, n, Li[n - 1]);
		if (pos == -1)exit(0);
		s->leftchild = CreateLI(Li, In, pos);
		s->rightchild = CreateLI(Li + pos, In + pos + 1, n - pos - 1);
	}

	return s;
}

//通過(guò)后中序數(shù)組建立二叉樹(shù)
BinaryTree CreateLITree(ElemType* Li, ElemType* In)
{
	int n = strlen(Li);
	if (Li == nullptr || In == nullptr)
	{
		return nullptr;
	}
	else
		return CreateLI(Li, In, n);
}
//二叉樹(shù)的前序遍歷(遞歸方式)根節(jié)點(diǎn)-左子樹(shù)-右子樹(shù)
void PreOrder(BtNode* root)
{
	if (root != nullptr)
	{
		cout << root->value << " ";
		PreOrder(root->leftchild);
		PreOrder(root->rightchild);
	}
}
//二叉樹(shù)的中序遍歷(遞歸方式)左子樹(shù)-根節(jié)點(diǎn)-右子樹(shù)
void InOrder(BtNode* root)
{
	if (root != nullptr)
	{
		InOrder(root->leftchild);
		cout << root->value << " ";
		InOrder(root->rightchild);
	}
}
//二叉樹(shù)的后序遍歷(遞歸方式)左子樹(shù)-右子樹(shù)-根節(jié)點(diǎn)
void PastOrder(BtNode* root)
{
	if (root != nullptr)
	{
		InOrder(root->leftchild);
		InOrder(root->rightchild);
		cout << root->value << " ";
	}
}
int main()
{
	char ar[] = { "ABCDEFGH" };
	char br[] = { "CBEDFAGH" };
	char cr[] = { "CBEDFGHA" };
	//BinaryTree root = CreateBinaryTree(ar, br);
	BinaryTree root = CreateLITree(cr, br);
	PreOrder(root);
	cout << endl;
	InOrder(root);
	cout << endl;
	PastOrder(root);
	cout << endl;
}

非遞歸的中序遍歷的實(shí)現(xiàn)

這里我們需要借助一個(gè)棧來(lái)實(shí)現(xiàn),利用棧的特性,后進(jìn)先出,當(dāng)我們到達(dá)端節(jié)點(diǎn)時(shí),打印端節(jié)點(diǎn)。按照中序的順序,既左中右打印二叉樹(shù)。具體怎么操作呢?

申請(qǐng)一個(gè)站用來(lái)存儲(chǔ)節(jié)點(diǎn),當(dāng)根節(jié)點(diǎn)不為空,或者棧不為空的時(shí)候判斷棧中節(jié)點(diǎn)的左孩子是否為空,如果左孩子不為空就繼續(xù)將左孩子入棧,如果左孩子為空,就打印該節(jié)點(diǎn),然后在訪問(wèn)右孩子,繼續(xù)之前的判斷。

要點(diǎn)在于我們?cè)L問(wèn)每一個(gè)節(jié)點(diǎn)的時(shí)候,都要將其當(dāng)做根節(jié)點(diǎn)來(lái)判斷,將其當(dāng)做一個(gè)小的二叉樹(shù),完成中序遍歷,那么總的實(shí)現(xiàn)下來(lái)就是整個(gè)二叉樹(shù)的中序遍歷啦。

代碼實(shí)現(xiàn):

void NiceInOrder(BtNode* root)
{
	//如果根節(jié)點(diǎn)為空的話,直接返回就不用排序
	if(root == nullptr) return;
    std::stack<BtNode*> st;
    while(root!=nullptr || !st.empty())
    {
        //不斷將左子樹(shù)入棧,當(dāng)左子樹(shù)為空時(shí),說(shuō)明到達(dá)端節(jié)點(diǎn)
        while(root!=nullptr)
        {
            st.push(root);
            root = root->leftchild;
        }
        root = st.top(); st.pop();
        cout<< root->value;
        root = root->rightchild;
        }
    }
}

二叉樹(shù)的非遞歸后序遍歷:

后序遍歷的順序是左右中,優(yōu)先訪問(wèn)左子樹(shù)當(dāng)左子樹(shù)訪問(wèn)完畢之后,在訪問(wèn)右子樹(shù),最后訪問(wèn)根節(jié)點(diǎn)。那么非遞歸的后序遍歷的難點(diǎn)在于,我們?cè)L問(wèn)到端節(jié)點(diǎn)之后如何判斷是否打印該節(jié)點(diǎn)呢,該節(jié)點(diǎn)是否還有右子樹(shù)沒(méi)有訪問(wèn)。

假設(shè)二叉樹(shù)只有三個(gè)節(jié)點(diǎn),如圖所示:

如果根節(jié)點(diǎn)不為空就將根節(jié)點(diǎn)入棧,因?yàn)槭呛笮虮闅v,所以要再訪問(wèn)根節(jié)點(diǎn)的左子樹(shù),可以看到左子樹(shù)也不為空,繼續(xù)向左子樹(shù)訪問(wèn),當(dāng)左子樹(shù)為空時(shí)返回到根節(jié)點(diǎn)繼續(xù)判斷右子樹(shù)是否為空,當(dāng)左右子樹(shù)都為空的時(shí)候,才能打印根節(jié)點(diǎn)。

代碼實(shí)現(xiàn):

void NicePastOrder(BtrNode* root)
{
    if(root == nullptr) return;
    std::stack<BtNode*> st;
    BtNode* tag = nullptr;//標(biāo)志位,總是指向最近打印的那個(gè)節(jié)點(diǎn)
    while(root != nullptr || !st.empty())
    {
        while(root!=nullptr)
        {
            st.push(root);
            root = root->left;
        }
        //當(dāng)上面的循環(huán)執(zhí)行完畢,說(shuō)明當(dāng)前的*root已經(jīng)指向了nullptr,那么他的雙親節(jié)點(diǎn)就是沒(méi)有左子樹(shù)的,然后可以進(jìn)行出戰(zhàn)操作了
        //當(dāng)執(zhí)行完出棧操作之后,我們就已經(jīng)知道了root節(jié)點(diǎn)的左孩子是空的,或者左孩子已經(jīng)打印過(guò)了。
        root= st.top(); st.pop();
        //因?yàn)閳?zhí)行的是后序遍歷、出棧之后我們還需要判斷,該節(jié)點(diǎn)是否有右子樹(shù),如果有并且還沒(méi)有遍歷,那么要將右子樹(shù)遍歷完畢才能打印根節(jié)點(diǎn)
        if(root->rightchild == nullptr || root->rightchild == tag)
        {
            cout << root->value;
            tag = ptr;
            ptr =nullptr;
        }
        else
        {
            //如果右子樹(shù)不為空,就要再將右子樹(shù)入棧,繼續(xù)判斷
            st.push(root);
            root = root->rightchild;
        }
    }
}

二叉樹(shù)的非遞歸的前序遍歷的實(shí)現(xiàn)

要實(shí)現(xiàn)前序遍歷就需要先打印根節(jié)點(diǎn),然后打印左子樹(shù)再打印右子樹(shù),還是要使用分治的策略。使用一個(gè)棧,先將根節(jié)點(diǎn)入棧,只要root不為空或者棧不為空就一直循環(huán),每次循環(huán)都出棧頂元素,并判斷并將棧頂元素的左右孩子入棧。

代碼實(shí)現(xiàn):

void NicePreOrder(BtNode* root)
{
	if (root == nullptr) return;
	stack<BtNode*> s;
	s.push(root);//先將根節(jié)點(diǎn)放進(jìn)去
	while (root != nullptr || !s.empty())
	{
		root = s.top(); s.pop();
		cout << root->value;
		if (root->rightchild != nullptr)
		{
			s.push(root->rightchild);
			root = root->rightchild;
		}
		if (root->leftchild != nullptr)
		{
			s.push(root->leftchild);
			root = root->leftchild;
		}
	}
}

二叉樹(shù)的創(chuàng)建以及前中后序遍歷的代碼總結(jié)

#include<iostream>
#include<stack>
#include<queue>
#include<memory>
/*
*二叉樹(shù)的存儲(chǔ)方式有兩種,一種是以鏈表的方式進(jìn)行存儲(chǔ),一種是以數(shù)組的方式進(jìn)行存儲(chǔ)
* 當(dāng)以數(shù)組的方式進(jìn)行存儲(chǔ)的時(shí)候,要注意節(jié)點(diǎn)之間的關(guān)系,假設(shè)根節(jié)點(diǎn)的位置為POS那么左子樹(shù)的位置就是
* 2*POS+1,右子樹(shù)的位置就是2*POS+2。正是由于這層關(guān)系,當(dāng)二叉樹(shù)不是滿二叉樹(shù)的時(shí)候,使用數(shù)組進(jìn)行存儲(chǔ)
* 是非常的浪費(fèi)空間的,空間的利用率較低。
* 當(dāng)以鏈表的方式存儲(chǔ)二叉樹(shù)的時(shí)候,每一個(gè)二叉樹(shù)節(jié)點(diǎn)都含有一個(gè)左孩子指針和一個(gè)右孩子指針,兩個(gè)指針?lè)謩e
* 指向相應(yīng)的節(jié)點(diǎn),節(jié)省空間,并且更容易使用。
*/
using namespace std;
typedef char ElemType;
typedef struct BtNode
{
	ElemType value;
	BtNode* leftchild;
	BtNode* rightchild;
}BtNode,*BinaryTree;


BtNode* BuyNode()
{
	BtNode* s = (BtNode*)malloc(sizeof(BtNode));
	if (s == NULL)return nullptr;
	memset(s, 0, sizeof(BtNode));
	return s;
}

int FindPos(ElemType* In, int n, ElemType val)
{
	int pos = -1;
	for (int i = 0; i < n ; ++i)
	{
		if (In[i] == val)
		{
			pos = i;
			break;
		}
	}
	return pos;
}
BinaryTree CreateBinTree(ElemType* Pr, ElemType* In, int n)
{
	BtNode* s = nullptr;
	if (n >= 1)
	{
		s = BuyNode();
		s->value = Pr[0];
		int pos = FindPos(In, n, Pr[0]);
		if (pos == -1) exit(0);

		s->leftchild = CreateBinTree(Pr + 1, In, pos);
		s->rightchild = CreateBinTree(Pr + pos + 1, In + pos + 1, n - pos - 1);
	}
	return s;
}
//通過(guò)前中序數(shù)組創(chuàng)建二叉樹(shù)
BinaryTree CreateBinaryTree(ElemType* Pr, ElemType* In)
{
	int n = strlen(Pr);
	if (Pr == nullptr || In == nullptr)
	{
		return nullptr;
	}
	else
		return CreateBinTree(Pr, In, n);
}

BinaryTree CreateLI(ElemType* In, ElemType* Li, int n)
{
	BtNode* s = nullptr;
	if (n >= 1)
	{
		s = BuyNode();
		s->value = Li[n - 1];//后序遍歷的最后一位數(shù)據(jù)是根節(jié)點(diǎn)
		int pos = FindPos(In, n, Li[n - 1]);
		if (pos == -1)exit(0);
		s->leftchild = CreateLI( In,Li, pos);
		s->rightchild = CreateLI( In + pos + 1,Li + pos, n - pos - 1);
	}

	return s;
}

//通過(guò)后中序數(shù)組建立二叉樹(shù)
BinaryTree CreateLITree(ElemType* In , ElemType* Li)
{
	int n = strlen(In );
	if (Li == nullptr || In == nullptr)
	{
		return nullptr;
	}
	else
		return CreateLI(In,Li , n);
}
//二叉樹(shù)的前序遍歷(遞歸方式)根節(jié)點(diǎn)-左子樹(shù)-右子樹(shù)
void PreOrder(BtNode* root)
{
	if (root != nullptr)
	{
		cout << root->value << " ";
		PreOrder(root->leftchild);
		PreOrder(root->rightchild);
	}
}

//二叉樹(shù)的中序遍歷(遞歸方式)左子樹(shù)-根節(jié)點(diǎn)-右子樹(shù)
void InOrder(BtNode* root)
{
	if (root != nullptr)
	{
		InOrder(root->leftchild);
		cout << root->value << " ";
		InOrder(root->rightchild);
	}
}

//二叉樹(shù)的后序遍歷(遞歸方式)左子樹(shù)-右子樹(shù)-根節(jié)點(diǎn)
void PastOrder(BtNode* root)
{
	if (root != nullptr)
	{
		InOrder(root->leftchild);
		InOrder(root->rightchild);
		cout << root->value << " ";
	}
}
二叉樹(shù)的中序遍歷(非遞歸方式)
//使用循環(huán)的方式一般是面試時(shí)考察的重點(diǎn),原理是使用棧去存儲(chǔ)相應(yīng)的子樹(shù),當(dāng)?shù)竭_(dá)終端節(jié)點(diǎn)時(shí),再將棧中的節(jié)點(diǎn)一一出棧
void NiceInOrder(BtNode* root)
{
	if (root == nullptr) return;
	stack<BtNode*> s;
	while (root !=nullptr || !s.empty())
	{
		//將整個(gè)左子樹(shù)入棧
		while (root != nullptr)
		{
			s.push(root);
			root = root->leftchild;
		}
		//到達(dá)端節(jié)點(diǎn)時(shí)開(kāi)始出棧
		root = s.top();
		s.pop();
		cout << root->value;
		root = root->rightchild;
	}
	cout << endl;
}
//二叉樹(shù)的前序遍歷(非遞歸方式)
void NicePreOrder(BtNode* root)
{
	if (root == nullptr) return;
	stack<BtNode*> s;
	BtNode* node = nullptr;
	s.push(root);
	while (!s.empty())
	{
		node = s.top();
		s.pop();
		cout << node->value;
		if (node->rightchild)
			s.push(node->rightchild);
		if (node->leftchild)
			s.push(node->leftchild);
	}
	cout << endl;
}

//二叉樹(shù)的后序遍歷(非遞歸方式)
void NicePastOrder(BtNode* root)
{
	if (root == nullptr)return;
	stack<BtNode*> st;
	BtNode* tag = nullptr;
	while (root != nullptr || !st.empty())
	{
		while (root != nullptr)
		{
			st.push(root);
			root = root->leftchild;
		}
		root = st.top();
		st.pop();
		if (root->rightchild == nullptr || root->rightchild == tag)
		{
			cout << root->value;
			tag = root;
			root = nullptr;
		}
		else
		{
			st.push(root);
			root = root->rightchild;
		}
	}
	cout << endl;
}
int main()
{
	char ar[] = { "ABCDEFGH" };
	char br[] = { "CBEDFAGH" };
	char cr[] = { "CEFDBHGA" };
	//BinaryTree root = CreateBinaryTree(ar, br);
	BinaryTree root = CreateLITree(br,cr );
	NiceInOrder(root);
	NicePreOrder(root);
	PreOrder(root);
	/*PreOrder(root);
	cout << endl;
	InOrder(root);
	cout << endl;
	PastOrder(root);
	cout << endl;*/
}
ightchild == tag)
{
cout << root->value;
tag = root;
root = nullptr;
}
else
{
st.push(root);
root = root->rightchild;
}
}
cout << endl;
}

int main()
{
char ar[] = { “ABCDEFGH” };
char br[] = { “CBEDFAGH” };
char cr[] = { “CEFDBHGA” };
//BinaryTree root = CreateBinaryTree(ar, br);
BinaryTree root = CreateLITree(br,cr );
NiceInOrder(root);
NicePreOrder(root);
PreOrder(root);
/PreOrder(root);
cout << endl;
InOrder(root);
cout << endl;
PastOrder(root);
cout << endl;/
}

到此這篇關(guān)于C++二叉樹(shù)的創(chuàng)建及遍歷詳情的文章就介紹到這了,更多相關(guān)C++二叉樹(shù)創(chuàng)建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++關(guān)于引用作為函數(shù)的用法

    C++關(guān)于引用作為函數(shù)的用法

    今天小編就為大家分享一篇關(guān)于C++關(guān)于引用作為函數(shù)的用法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • C++按照正態(tài)分布來(lái)排列整型數(shù)組元素

    C++按照正態(tài)分布來(lái)排列整型數(shù)組元素

    這篇文章主要介紹了C++按照正態(tài)分布來(lái)排列整型數(shù)組元素的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • C++中vector迭代器失效問(wèn)題詳解

    C++中vector迭代器失效問(wèn)題詳解

    vector是向量類型,它可以容納許多類型的數(shù)據(jù),如若干個(gè)整數(shù),所以稱其為容器,這篇文章主要給大家介紹了關(guān)于C++中vector迭代器失效問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • C++中的Z字形變換問(wèn)題

    C++中的Z字形變換問(wèn)題

    將一個(gè)給定字符串?s?根據(jù)給定的行數(shù)?numRows?,以從上往下、從左到右進(jìn)行?Z?字形排列,這樣一個(gè)需求怎么實(shí)現(xiàn)呢,下面小編給大家?guī)?lái)了C++中的Z字形變換問(wèn)題,需要的朋友可以參考下
    2022-07-07
  • C++中的四種類型轉(zhuǎn)換

    C++中的四種類型轉(zhuǎn)換

    類型轉(zhuǎn)換有c風(fēng)格的,當(dāng)然還有c++風(fēng)格的。c風(fēng)格的轉(zhuǎn)換的格式很簡(jiǎn)單(TYPE)EXPRESSION,但是c風(fēng)格的類型轉(zhuǎn)換有不少的缺點(diǎn),有的時(shí)候用c風(fēng)格的轉(zhuǎn)換是不合適的,因?yàn)樗梢栽谌我忸愋椭g轉(zhuǎn)換,
    2015-08-08
  • 數(shù)據(jù)結(jié)構(gòu)用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的實(shí)例

    數(shù)據(jù)結(jié)構(gòu)用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的實(shí)例

    這篇文章主要介紹了C++語(yǔ)言數(shù)據(jù)結(jié)構(gòu)用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++一個(gè)數(shù)組賦值給另一個(gè)數(shù)組方式

    C++一個(gè)數(shù)組賦值給另一個(gè)數(shù)組方式

    文章介紹了三種在C++中將一個(gè)數(shù)組賦值給另一個(gè)數(shù)組的方法:使用循環(huán)逐個(gè)元素賦值、使用標(biāo)準(zhǔn)庫(kù)函數(shù)std::copy或std::memcpy以及使用標(biāo)準(zhǔn)庫(kù)容器,每種方法都有其適用的場(chǎng)景和注意事項(xiàng)
    2025-02-02
  • C語(yǔ)言示例講解if else語(yǔ)句的用法

    C語(yǔ)言示例講解if else語(yǔ)句的用法

    這篇文章主要介紹C語(yǔ)言中的If Else語(yǔ)句怎么使用,在日常操作中,相信很多人在If Else語(yǔ)句怎么使用問(wèn)題上存在疑惑,小編查閱了各式資料,整理出使用方法,接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧
    2022-06-06
  • C++中replace()函數(shù)使用方法匯總

    C++中replace()函數(shù)使用方法匯總

    這篇文章主要介紹了C++中replace()函數(shù)使用方法匯總,在這篇文章中為大家詳細(xì)介紹C++ replace()函數(shù)的各種應(yīng)用方式,希望朋友們可以從這里介紹的內(nèi)容充分掌握這一應(yīng)用技巧
    2015-11-11
  • VS C++頭文件引用提示“未定義標(biāo)識(shí)符”的問(wèn)題解決

    VS C++頭文件引用提示“未定義標(biāo)識(shí)符”的問(wèn)題解決

    本文主要介紹了VS C++頭文件引用提示“未定義標(biāo)識(shí)符”的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評(píng)論

林口县| 德惠市| 开化县| 喀喇| 东城区| 东乡族自治县| 浪卡子县| 安国市| 田阳县| 亳州市| 平湖市| 康马县| 江永县| 淮阳县| 夹江县| 汉寿县| 怀化市| 菏泽市| 五华县| 西华县| 乌拉特后旗| 平原县| 泉州市| 浦江县| 黄浦区| 上林县| 江口县| 油尖旺区| 沛县| 宜良县| 昔阳县| 遂昌县| 南郑县| 兴和县| 德令哈市| 嘉鱼县| 黔南| 石阡县| 嘉禾县| 荆州市| 罗江县|