亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? p236.cpp

?? 包含常見的數據結構的類和函數
?? CPP
字號:
#include <iostream.h>#include "P170.cpp"#include "Stack.h"const MaxN=30;template <class Type> class BST;							//二叉搜索樹的前視聲明template <class Type> class BstNode : public BinTreeNode<Type> {			//二叉搜索樹結點類friend class BST;public:   BstNode ( const Type d=0, BstNode *L=NULL, BstNode *R =NULL)			//構造函數      : data (d), leftChild (L), rightChild (R) { };   ~BstNode ( ) { }   friend class BST<Type>;protected:   Type data;										//數據域(用作關鍵碼)   BstNode<Type> *leftChild, *rightChild;						//左子女和右子女鏈域};template <class Type> class BST : BinaryTree <Type> {					//二叉搜索樹類定義public:	BST ( ) :root(NULL){};								//構造函數   BST ( Type value ) ;   BST (const BST<Type> & T) ;//構造函數   ~BST ( ) { MakeEmpty (  ); }							//析構函數   const BST & operator = ( const BST & Value );   void MakeEmpty( ) { destroy (root);  root=NULL; }   void PrintTree ( ) const { PrintTree ( root ); }   int Find ( const Type & x ) const { return (Find ( x, root )!=NULL) ; }	//搜索元素   Type Min() { return Min(root)->data;};										//求最小   Type Max() { return Max(root)->data;};										//求最大   int Insert ( const Type & x ) { return Insert ( x, root ); }				//插入新元素   int Remove (const Type & x ) { return Remove ( x, root ); }				//刪除含x的結點   BstNode<Type> *Split ( Type i, BST<Type> &B, Type &x, BST<Type> &C );   void OpticBST ( int p[ ], int q[ ], Type a[ ], int n );   friend class BSTIterator ;//中序游標類   private:											//在關鍵碼i處分解二叉搜索樹   BstNode<Type> *root;								//二叉搜索樹的根指針   Type RefValue;										//數據輸入停止的標志, 用于輸入   BstNode<Type> *lastfound;								//最近搜索到的結點的指針//   void MakeEmpty ( BstNode<Type> * ptr );					//置空   int Insert ( const Type & x, BstNode<Type> * & ptr );			//插入   int Remove ( const Type & x, BstNode<Type> * & ptr );			//刪除   void PrintTree ( BstNode<Type> * ptr ) const;					//打印   BstNode<Type> *Copy (const BstNode<Type> * ptr );				//復制   BstNode<Type> *Find (const Type & x, BstNode<Type> * ptr ) const;	//搜索   BstNode<Type> *Min ( BstNode<Type> * ptr ) const;				//求最小   BstNode<Type> *Max ( BstNode<Type> * ptr ) const;				//求最大 };/*template <class Type> BstNode<Type> * BST<Type>::Find (const Type & x, BstNode<Type> * ptr ) const {//私有函數:在以ptr為根的二叉搜索樹中搜索含x的結點。若找到,則函數返回該結點的地址,否則函數返回//NULL值。   if ( ptr == NULL ) return NULL;   else if ( x < ptr->data ) return Find ( x, ptr->leftChild );			//到左子樹中繼續搜索	 else if ( x > ptr->data ) return Find( x, ptr->rightChild );			//到右子樹中繼續搜索	    else return ptr;								//搜索成功}*/template <class Type> BstNode<Type> *BST<Type>::Find (const Type & x, BstNode<Type> * ptr ) const {//私有函數: 說明與程序7.14相同   if ( ptr != NULL ) {									//樹空返回	 BstNode<Type> * temp = ptr;							//從根開始搜索	 while ( temp != NULL ) {								//==NULL表示搜索失敗	    if ( temp->data == x ) return temp;					//搜索成功	    if ( temp->data < x ) temp = temp->rightChild;				//否則,繼續搜索右子樹	    else temp = temp->leftChild;						//否則,繼續搜索左子樹	 }   }   return NULL;};template <class Type> int BST<Type>::Insert (const Type & x, BstNode<Type> * & ptr) {//私有函數:在以ptr為根的二叉搜索樹中插入所含值為x的結點。若在樹中已經有含x的結點,則不插入。   if ( ptr == NULL )	{							//新結點作為葉結點插入	 ptr = new BstNode<Type> (x);						//創建新結點	 if ( ptr == NULL ) return 0; else return 1;   }   else if ( x < ptr->data ) return Insert ( x, ptr->leftChild );			//小于根的關鍵碼, 向左子樹插入	 else if ( x > ptr->data ) return Insert ( x, ptr->rightChild );		//大于, 向右子樹插入   return 1;							//除上述情況外, 就是x已在樹中的情形, 不再插入}template <class Type>BST<Type>::BST ( Type value ) {//輸入一個元素序列, 建立一棵二叉搜索樹   Type x;  root = NULL;  RefValue = value;			//置空樹   cin >> x;									//輸入數據   while ( x != RefValue )   {						//RefValue是一個輸入結束標志      Insert ( x, root );  cin >> x;					//插入,再輸入數據   }}template <class Type>void BST<Type>::PrintTree ( BstNode<Type> * ptr ) const					//打印{	if (ptr!=NULL)	{		cout<<ptr->data;		cout<<"(";		PrintTree(ptr->leftChild);		cout<<",";		PrintTree(ptr->rightChild);		cout<<")";	}}template <class Type> int BST<Type>::Remove (const Type &x, BstNode<Type> * &ptr) {//私有函數:在以ptr為根的二叉搜索樹中刪除含x的結點。若刪除成功則新根通過ptr返回。   BstNode<Type> * temp;   if ( ptr != NULL )	if ( x < ptr->data ) return Remove ( x, ptr->leftChild );				//在左子樹中執行刪除	else if ( x > ptr->data )  return Remove ( x, ptr->rightChild );			//在右子樹中執行刪除	   else if ( ptr->leftChild != NULL && ptr->rightChild != NULL )	{						// ptr指示關鍵碼為x的結點,它有兩個子女		   temp = Min ( ptr->rightChild );					//在ptr的右子樹中搜尋最小結點		   ptr->data = temp->data;						//用該結點數據代替根結點數據		   return Remove ( ptr->data, ptr->rightChild );				//在右子樹中刪除該結點		 }		 else {				// ptr指示關鍵碼為x的結點,它只有一個或零個子女			  temp = ptr;			  if ( ptr->leftChild == NULL ) ptr = ptr->rightChild;		//只有右子女			  else if ( ptr->rightChild == NULL ) ptr = ptr->leftChild;	//只有左子女		      delete temp;		      return 1;		    }   else return 0;}template <class Type> class InorderIterator	{	    			//中序游標類定義public:   InorderIterator ( BST<Type> & Tree ) : ref (Tree) { Init ( ); }   int Init ( );									//初始化   int operator ! ( );								//求反   Type operator ( ) ( );								//取棧頂元素值   int operator ++ ( );								// BST按前序進行遍歷private:   BST<Type> & ref;								//二叉搜索樹對象   Stack < BstNode<Type> * > itrStack;					//迭代工作棧};template <class Type> int InorderIterator<Type>::Init ( ) {			//初始化操作   itrStack.MakeEmpty ( );								//置迭代工作棧為空   if ( ref.root != NULL ) itrStack.Push ( ref.root );				//若二叉搜索樹不空則根指針進棧   return ! itrStack.IsEmpty ( );							//若棧空則返回0,否則返回1}template <class Type> int InorderIterator<Type>::operator ! ( ) {   return ! itrStack.IsEmpty ( );							//若棧空則返回0,否則返回1}template <class Type> Type InorderIterator<Type>::operator ( ) ( ) {	//返回當前結點的數據值   Node<Type> * current = itrStack.GetTop ( );				//取棧頂結點為當前結點   return current->data;								//返回當前結點的關鍵碼}template <class Type> int InorderIterator<Type>::operator ++ ( ) {//按二叉搜索樹結點的前序序列進棧。還可以向前走則函數返回1, 否則返回0。   BstNode<Type> * current = itrStack.GetTop ( );				//取存在棧頂上的結點   BstNode<Type> * next = current->leftChild;				//左子女   if ( next != NULL ) { itrStack.Push ( next );  return 1; }			//左子女非空, 進棧(向左子樹遍歷)   while ( ! itrStack.IsEmpty ( ) ) {						//否則, 若棧非空      current = itrStack.Pop ( );   next = current->rightChild;		//退棧, 取其右子女      if ( next != NULL ) { itrStack.Push ( next );  return 1; }		//右子女非空, 進棧   }   return 0;}/*template <class Type>BST<Type>::BST (const BST<Type> & T) : root (NULL) {//構造函數:根據參數初始化樹T   InorderIterator<Type> itr ( Type );						//聲明中序游標類對象   for ( itr.init ( ); ! itr; itr++) Insert ( itr ( ) );				//按前序順序插入}*/template <class Type>BstNode<Type> * BST<Type>::Min ( BstNode<Type> * ptr ) const				//求最小{  BstNode<Type> * temp1,*temp2;  temp1=ptr;  if (ptr!=NULL)  {    if (ptr->leftChild!=NULL)    {	temp2=Min(ptr->leftChild);	if (temp1->data>temp2->data) temp1=temp2;    }    if (ptr->rightChild!=NULL)    {	temp2=Min(ptr->rightChild);	if (temp1->data>temp2->data) temp1=temp2;    }  }  return temp1;}template <class Type>BstNode<Type> * BST<Type>::Max ( BstNode<Type> * ptr ) const				//求最小{  BstNode<Type> * temp1,*temp2;  temp1=ptr;  if (ptr!=NULL)  {    if (ptr->leftChild!=NULL)    {	temp2=Max(ptr->leftChild);	if (temp1->data<temp2->data) temp1=temp2;    }    if (ptr->rightChild!=NULL)    {	temp2=Max(ptr->rightChild);	if (temp1->data<temp2->data) temp1=temp2;    }  }  return temp1;}template <class Type> void BST<Type>::OpticBST ( int p[ ], int q[ ], Type a[ ], int n ) {//給定n個不同的數據 a[1] < a[2] < … < a[n], 以及它們具有的權值p[j], 1 ( j ( n, 另外落在它們之間外部//結點上的權值分別為 q[i], 0 ( i ( n。本算法計算a[i+1], ……, a[j]的最優二叉搜索樹T[i][j]的代價C[i][j],//T[i][j]的根R[i][j]和權W[i][j]。   int R[MaxN+1][MaxN+1];   int C[MaxN+1][MaxN+1];   int W[MaxN+1][MaxN+1];   for ( int i=0; i<n; i++)    {	 W[i][i] = q[i];  C[i][i] = R[i][i] = 0;		//初始化	 W[i][i+1] = W[i][i] + p[i+1] + q[i+1];		//構造只有一個內部結點, 兩個外部結點的最優二叉搜索樹	 R[i][i+1] = i+1;					//這些樹的根在i+1	 C[i][i+1] = W[i][i+1];				//這些樹的總帶權路徑長度(代價)   }   W[n][n] = q[n];  R[n][n] = C[n][n] = 0;   for ( int m=2; m<=n; m++ )				//構造具有m個內部結點的最優二叉搜索樹	 for ( i=0; i<=n-m; i++ ) 	 {	   int j = i + m;   W[i][j] = W[i][j-1] + p[j] + q[j];  //在前一棵樹基礎上再加一內部結點和一外部結點	   int min = C[i+1][j],  u = i+1;			//假定i+1為根, 計算代價	   for ( int k=i+2; k<=j; k++ )   		if ( C[i][k-1] + C[k][j] < min ) 		{ min = C[i][k-1] + C[k][j];  u = k; }									//輪流以i+2,…,j為根, 選代價最小的送min, 其根為u		C[i][j] = W[i][j] + min;  R[i][j] = u;	 }    Stack < int > nodeStack;	MakeEmpty();	nodeStack.Push(0);	nodeStack.Push(n);	while (!nodeStack.IsEmpty()) 	{		int j=nodeStack.Pop();		int i=nodeStack.Pop();		Insert(a[R[i][j]]);		if ((i+1)<R[i][j])		{			nodeStack.Push(i);			nodeStack.Push(R[i][j]-1);		};		if ((R[i][j])<j)		{			nodeStack.Push(R[i][j]);			nodeStack.Push(j);		};	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久88久久88久久久| caoporen国产精品视频| 久久亚洲一级片| 国产一区在线精品| 国产三级精品三级| 99vv1com这只有精品| 一区二区三区鲁丝不卡| 欧美日韩成人一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩一区二区免费电影| 国产精一区二区三区| 国产精品视频在线看| 91福利社在线观看| 日韩精品亚洲一区二区三区免费| 欧美一级在线观看| 国产成a人亚洲| 亚洲精品免费一二三区| 91精品国产一区二区三区蜜臀 | 色94色欧美sute亚洲线路一ni| 亚洲自拍偷拍麻豆| 欧美xxxx老人做受| 成人黄色大片在线观看| 一区二区免费在线| 日韩视频一区二区在线观看| 国产成人在线视频免费播放| 亚洲精选视频在线| 欧美一级欧美三级| av亚洲精华国产精华精华| 一个色妞综合视频在线观看| 日韩欧美高清dvd碟片| 95精品视频在线| 青青草一区二区三区| 中文字幕不卡的av| 欧美另类z0zxhd电影| 国产精品99久久久久久似苏梦涵 | 麻豆免费看一区二区三区| 日本一区二区三区视频视频| 欧美日韩免费观看一区二区三区| 精品一区二区三区视频在线观看| 亚洲少妇屁股交4| 日韩亚洲欧美综合| 91免费精品国自产拍在线不卡| 日韩精品高清不卡| 国产精品久久99| 欧美一区午夜精品| 99精品久久99久久久久| 免费久久精品视频| 亚洲精品欧美在线| 国产亲近乱来精品视频| 在线播放日韩导航| voyeur盗摄精品| 麻豆一区二区三| 亚洲一区二区成人在线观看| 国产女同互慰高潮91漫画| 欧美日高清视频| 成人av片在线观看| 久久精品久久久精品美女| 亚洲精品免费一二三区| 国产欧美日本一区二区三区| 538prom精品视频线放| 色综合欧美在线视频区| 国产精品1区2区| 秋霞午夜av一区二区三区| 亚洲美女视频在线| 欧美激情一二三区| 26uuu色噜噜精品一区二区| 欧美日本不卡视频| 色屁屁一区二区| 粉嫩av一区二区三区| 美美哒免费高清在线观看视频一区二区| 亚洲精品免费一二三区| 国产精品毛片无遮挡高清| 欧美精品一区二区在线观看| 欧美日高清视频| 欧美综合在线视频| 99久久99久久精品免费观看| 国产一区二区女| 麻豆精品在线视频| 天天色综合天天| 一区二区三区四区在线免费观看| 中文字幕va一区二区三区| 欧美精品一区二区三区高清aⅴ | 国产一区在线不卡| 免费不卡在线视频| 日韩av一级片| 性久久久久久久久| 亚洲无线码一区二区三区| 亚洲精品日韩一| 亚洲色图在线看| 中文字幕欧美一| 欧美韩国一区二区| 国产视频一区不卡| 久久亚洲免费视频| 精品久久久久久综合日本欧美 | 3atv一区二区三区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 色欧美片视频在线观看| 99精品国产91久久久久久| 成人看片黄a免费看在线| 国产成人在线观看免费网站| 国产米奇在线777精品观看| 黄色精品一二区| 精品一区二区影视| 国产一区二区三区精品视频| 国产又粗又猛又爽又黄91精品| 精品在线观看免费| 国模少妇一区二区三区| 国产在线视视频有精品| 国产精品影音先锋| 国产成人在线影院| av在线不卡观看免费观看| 97se狠狠狠综合亚洲狠狠| 91蜜桃婷婷狠狠久久综合9色| 91亚洲精品乱码久久久久久蜜桃| 91在线云播放| 91精彩视频在线观看| 欧美在线free| 欧美精品精品一区| 日韩三级av在线播放| 精品久久久久99| 国产农村妇女毛片精品久久麻豆| 中文字幕电影一区| 亚洲精品国产无套在线观| 亚洲影视资源网| 天天色天天操综合| 国模大尺度一区二区三区| 成人精品鲁一区一区二区| 94-欧美-setu| 欧美日本国产一区| 精品国产成人在线影院| 国产性色一区二区| 亚洲色图在线看| 视频一区二区欧美| 韩国午夜理伦三级不卡影院| 国产福利一区二区三区在线视频| 成人高清免费观看| 在线日韩国产精品| 欧美二区在线观看| 久久日韩精品一区二区五区| 国产精品网站在线播放| 一区二区国产视频| 免费在线观看日韩欧美| 国产精品一级在线| 色综合久久88色综合天天| 欧美情侣在线播放| 久久免费看少妇高潮| 亚洲欧洲精品天堂一级 | 亚洲影院在线观看| 久久国内精品视频| 波波电影院一区二区三区| 欧亚一区二区三区| 337p日本欧洲亚洲大胆色噜噜| 日韩一区在线播放| 日韩国产精品久久久久久亚洲| 国产一区二区三区黄视频| 色婷婷国产精品| 欧美va亚洲va| 日韩伦理av电影| 日本欧美久久久久免费播放网| 国产成人亚洲综合a∨婷婷| 日本道色综合久久| 欧美精品一区二区三区在线| 亚洲精品va在线观看| 久久精品国产精品青草| 91影院在线观看| 日韩欧美二区三区| 亚洲天堂精品在线观看| 美女看a上一区| 91丨九色porny丨蝌蚪| 日韩一级成人av| 亚洲视频你懂的| 国产一区免费电影| 欧美性感一类影片在线播放| 久久综合五月天婷婷伊人| 亚洲五码中文字幕| 国产成人免费9x9x人网站视频| 欧美日韩一卡二卡三卡| 国产精品视频线看| 奇米777欧美一区二区| 91视视频在线观看入口直接观看www | 亚洲视频你懂的| 韩国精品免费视频| 欧美午夜精品一区二区蜜桃| 精品粉嫩超白一线天av| 亚洲一卡二卡三卡四卡无卡久久| 国产精品一区二区不卡| 欧美日产国产精品| 亚洲欧洲av在线| 精品一区二区免费| 欧美日韩精品一区二区在线播放| 国产精品国产三级国产普通话蜜臀 | 精品国产一区二区三区av性色| 亚洲欧美福利一区二区| 国产精品亚洲第一区在线暖暖韩国| 欧美精品欧美精品系列| 亚洲精选免费视频| 成人在线综合网站| 欧美r级电影在线观看| 性做久久久久久免费观看欧美| 91欧美一区二区|