1.求C++ 的B樹源代碼 最好要有注釋說明,讓人能看明白的
英文注釋,望能看看/*=========================== BinTreeh.h =========================*/#include
2.求數據結構 B
那個叫二叉樹啊 樹是一種重要的非線性數據結構,直觀地看,它是數據元素(在樹中稱為結點)按分支關系組織起來的結構,很象自然界中的樹那樣。
樹結構在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構都可用樹形象表示。樹在計算機領域中也得到廣泛應用,如在編譯源程序如下時,可用樹表示源源程序如下的語法結構。
又如在數據庫系統中,樹型結構也是信息的重要組織形式之一。一切具有層次關系的問題都可用樹來描述。
一、樹的概述 樹結構的特點是:它的每一個結點都可以有不止一個直接后繼,除根結點外的所有結點都有且只有一個直接前趨。以下具體地給出樹的定義及樹的數據結構表示。
(一)樹的定義 樹是由一個或多個結點組成的有限集合,其中:⒈必有一個特定的稱為根(ROOT)的結點;⒉剩下的結點被分成n>=0個互不相交的集合T1、T2、。
Tn,而且, 這些集合的每一個又都是樹。樹T1、T2、。
Tn被稱作根的子樹(Subtree)。
樹的遞歸定義如下:(1)至少有一個結點(稱為根)(2)其它是互不相交的子樹1.樹的度——也即是寬度,簡單地說,就是結點的分支數。以組成該樹各結點中最大的度作為該樹的度,如上圖的樹,其度為3;樹中度為零的結點稱為葉結點或終端結點。
樹中度不為零的結點稱為分枝結點或非終端結點。除根結點外的分枝結點統稱為內部結點。
2.樹的深度——組成該樹各結點的最大層次,如上圖,其深度為4;3.森林——指若干棵互不相交的樹的集合,如上圖,去掉根結點A,其原來的二棵子樹T1、T2、T3的集合就為森林;4.有序樹——指樹中同層結點從左到右有次序排列,它們之間的次序不能互換,這樣的樹稱為有序樹,否則稱為無序樹。5.樹的表示 樹的表示方法有許多,常用的方法是用括號:先將根結點放入一對圓括號中,然后把它的子樹由左至右的順序放入括號中,而對子樹也采用同樣的方法處理;同層子樹與它的根結點用圓括號括起來,同層子樹之間用逗號隔開,最后用閉括號括起來。
如上圖可寫成如下形式:(A(B(E(K,L),F),C(G),D(H(M),I,J)))5. 2 二叉樹1.二叉樹的基本形態:二叉樹也是遞歸定義的,其結點有左右子樹之分,邏輯上二叉樹有五種基本形態:(1)空二叉樹——(a);(2)只有一個根結點的二叉樹——(b);(3)右子樹為空的二叉樹——(c);(4)左子樹為空的二叉樹——(d);(5)完全二叉樹——(e) 注意:盡管二叉樹與樹有許多相似之處,但二叉樹不是樹的特殊情形。 2.兩個重要的概念:(1)完全二叉樹——只有最下面的兩層結點度小于2,并且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹;(2)滿二叉樹——除了葉結點外每一個結點都有左右子女且葉結點都處在最底層的二叉樹,。
3.二叉樹的性質(1) 在二叉樹中,第i層的結點總數不超過2^(i-1);(2) 深度為h的二叉樹最多有2^h-1個結點(h>=1),最少有h個結點;(3) 對于任意一棵二叉樹,如果其葉結點數為N0,而度數為2的結點總數為N2,則N0=N2+1;(4) 具有n個結點的完全二叉樹的深度為int(log2n)+1 (5)有N個結點的完全二叉樹各結點如果用順序方式存儲,則結點之間有如下關系:若I為結點編號則 如果I<>1,則其父結點的編號為I/2;如果2*I<=N,則其左兒子(即左子樹的根結點)的編號為2*I;若2*I>N,則無左兒子;如果2*I+1<=N,則其右兒子的結點編號為2*I+1;若2*I+1>N,則無右兒子。4.二叉樹的存儲結構:(1)順序存儲方式 type node=record data:datatype l,r:integer; end; var tr:array[1..n] of node;(2)鏈表存儲方式,如:type btree=^node;node=record data:datatye; lchild,rchild:btree; end;5.普通樹轉換成二叉樹:凡是兄弟就用線連起來,然后去掉父親到兒子的連線,只留下父母到其第一個子女的連線。
二叉樹很象一株倒懸著的樹,從樹根到大分枝、小分枝、直到葉子把數據聯系起來,這種數據結構就叫做樹結構,簡稱樹。樹中每個分叉點稱為結點,起始結點稱為樹根,任意兩個結點間的連接關系稱為樹枝,結點下面不再有分枝稱為樹葉。
結點的前趨結點稱為該結點的"雙親",結點的后趨結點稱為該結點的"子女"或"孩子",同一結點的"子女"之間互稱"兄弟"。二叉樹:二叉樹是一種十分重要的樹型結構。
它的特點是,樹中的每個結點最多只有兩棵子樹,即樹中任何結點的度數不得大于2。二叉樹的子樹有左右之分,而且,子樹的左右次序是重要的,即使在只有一棵子樹的情況下,也應分清是左子樹還是右子樹。
定義:二叉樹是結點的有限集合,這個集合或是空的,或是由一個根結點和兩棵互不相交的稱之為左子樹和右子樹的二叉樹組成。 (三)完全二叉樹 對滿二叉樹,從第一層的結點(即根)開始,由下而上,由左及右,按順序結點編號,便得到滿二叉樹的一個順序表示。
據此編號,完全二叉樹定義如下:一棵具有n個結點,深度為K的二叉樹,當且僅當所有結點對應于深度為K的滿二叉樹中編號由1至n的那些結點時,該二叉樹便是完全二叉樹。圖4是一棵完全二叉樹。
三、二叉樹的遍歷 遍歷是對樹的一種最基本的運算,所謂遍歷二叉樹,就是按一定的規則和順序走遍二叉樹的所有結點,。
3.求C的B樹源代碼最好要有注釋說明,讓人能看明白的
英文注釋,望能看看/*=========================== BinTreeh。
h =========================*/#include /*=========================== data struct =====================*/typedef char ElementType;typedef struct Node{ ElementType data; struct Node *LChild; /* LeftChild */ struct Node *RChild; /* RightChild */ } TreeNode;/*=============================== function prounce ===============*/int CreateBinTree( TreeNode **rootp,ElementType **lp );void FreeTree( TreeNode *rootp );int DelTree( TreeNode *rootp,ElementType e );int Insert( TreeNode *rootp,ElementType Curr,ElementType e,int CurrPos );TreeNode *FindNode( TreeNode *rootp,ElementType e );TreeNode *FindParent( TreeNode *rootp,ElementType e );void Leaf( TreeNode *rootp,int *np );int Depth( TreeNode *rootp );void PreOrder( TreeNode *rootp );void MidOrder( TreeNode *rootp );void BackOrder( TreeNode *rootp );/*================================ function body ================*//*------------------------------------------------------ CreateTree -------*/int CreateBinTree( TreeNode **rootp,ElementType **lp ){ ElementType CurrElement; if(*lp==NULL) return 0; /* string isn't exist */ if(**lp==0) return 1; /* empty string */ CurrElement=*(*lp); (*lp) ; if(CurrElement=='。 ') { (*rootp)=NULL; return 1; } if(!((*rootp)=(TreeNode *) malloc(sizeof(TreeNode))) ) return 0; (*rootp)->data=CurrElement; if(!CreateBinTree(&(*rootp)->LChild,lp)) return 0; return CreateBinTree(&(*rootp)->RChild,lp);}/*------------------------------------------------------- PreOrder --------*/void PreOrder( TreeNode *rootp ){ if(rootp==NULL) return; printf(" %c",rootp->data); /* show parent */ if(rootp->LChild!=NULL) PreOrder(rootp->LChild); /* show LeftChild */ if(rootp->RChild!=NULL) PreOrder(rootp->RChild); /* show RightChild */ return;}/*-------------------------------------------------------- MidOrder --------*/void MidOrder( TreeNode *rootp ){ if(rootp==NULL) return; if(rootp->LChild!=NULL) MidOrder(rootp->LChild); printf(" %c",rootp->data); if(rootp->RChild!=NULL) MidOrder(rootp->RChild); return;}/*------------------------------------------------------ BackOrder --------*/void BackOrder( TreeNode *rootp ){ if(rootp==NULL) return; if(rootp->LChild!=NULL) BackOrder(rootp->LChild); if(rootp->RChild!=NULL) BackOrder(rootp->RChild); printf(" %c",rootp->data); return;}/*------------------------------------------------------- FindNode --------*/TreeNode *FindNode( TreeNode *rootp,ElementType e ){ TreeNode *temp; if(rootp==NULL) return NULL; /* if(!rootp) */ if(rootp->data==e) return rootp; if(temp=FindNode(rootp->LChild,e)) return temp; return FindNode(rootp->RChild,e);}/*------------------------------------------------------- FreeTree --------*/void FreeTree( TreeNode *rootp ){ if(!rootp) return; FreeTree(rootp->LChild); FreeTree(rootp->RChild); free(rootp);}/*----------------------------------------------------- FindParent --------*/TreeNode *FindParent( TreeNode *rootp,ElementType e ){ TreeNode *temp; if((rootp==NULL)||(rootp->LChild==NULL && rootp->RChild==NULL)) return NULL; if((rootp->LChild && rootp->LChild->data==e) ||(rootp->RChild && rootp->RChild->data==e)) return rootp; temp=FindParent(rootp->LChild,e); if(temp) return temp; return FindParent(rootp->RChild,e);}/*-------------------------------------------------------- DelTree --------*/int DelTree( TreeNode *rootp,ElementType e ){ TreeNode *temp; temp=FindParent(rootp,e); if(!temp) return 0; if(temp->LChild &&(temp->LChild->data==e)) { FreeTree(temp->LChild); temp->LChild=NULL; } else { FreeTree(temp->RChild); temp->RChild=NULL; } return 1;}/*-------------------------------------------------------- Insert --------*/int Insert( TreeNode *rootp,ElementType Curr,ElementType e,int CurrPos ){ TreeNode *parent,*new,*temp; if(!(parent=FindParent(rootp,Curr))) return 0; if(!(new=(TreeNode *) malloc(sizeof(TreeNode)))) return 0; new->data=e; if(parent->LChild->data==Curr) { temp=parent->LChild; parent->LChild=new; } temp=parent->RChild; parent->RChild=new; if(CurrPos==0) new->LChild=temp; new->RChild=NULL; if(CurrPos==1) new->RChild=temp; new->LChild=NULL; return 1;}/*----------------------------------------------------------- Leaf --------*/void Leaf( TreeNode *rootp,int *np ){ if(rootp==NULL) return ; if(rootp->LChild==NULL && rootp->RChild==NULL) { (*np) ; return; } Leaf(rootp->LChild,np); Leaf(rootp->RChild,np);}/*---------------------------------------------------------- Depth --------*/int Depth( TreeNode *rootp ){ int ld,rd; /* ld: LeftChild's depth */ /* rd: RightChild's depth */ if(rootp==NULL) return 0; ld=Depth(rootp->LChild); rd=Depth(rootp->RChild); if(ld>rd) return ld 1; else return rd 1;}/*=========================== The end of BinTreeh。
h =========。
4.寫一個簡短的C語言代碼
#include <stdio.h>
int main()
{
權double a,b,c;
scanf("%lf",&a);
scanf("%lf",&b);
c=a+b;
printf("first number:%.2lf",a);
printf("\nsecond number%.2lf",b);
printf("\n\t%.2lf",a);
printf("\n+\t%.2lf",b);
printf("\n-------------\n");
printf(" %.2lf\n",c);
return 0;
}
5.用B+樹做最簡單的“鍵
我來設計:分idx引索, dat數據2個文件存儲,2個文件都分成大小相等的塊Node。
比如idx文件分成512個字節一個的塊Node,dat分成64個字節一個的塊節點的key和記錄的主鍵同值由這種塊組成B+樹。idx文件中放2個以上的B+樹,最少2棵樹,一個Tree U用來分配定位dat中的已用空間,另一個Tree F用來分配刪除后未用的可用空間。
還可以放多個對具體應用的引索樹,在“葉節點”上key鍵值和dat文件的塊號對應起來,每個key對應一個dat文件的塊號。dat中放每條記錄,每個記錄的大小就是每個塊的大小。
所以根據自己的數據決定dat的塊大小,這個大小和idx文件的引索塊不同。
比如引索塊可以較大512個字節來減少讀盤次數,而記錄塊可以較小的64個字節來對應每項小數據記錄。dat中不放樹,僅僅分為一個一個相同大小的記錄塊由idx中的B+樹來分配和查找dat中的塊。
記錄塊要標出,是否使用,使用了多少的信息未使用的塊由Tree F來再利用。
6.C++
你好!!!
#include
#include
#include
#include
using namespace std;
void main()
{
vector>a1;
pair b;
string s;
int a;
while (cin>>s>>a)
{
b=make_pair(s,a);
*_back(b);
}
for (vector>::iterator f=*();f!=*();f++)
{
coutfirstsecond
7.數據結構B樹的設計與實現
B樹的插入算法在編寫過程中還是覺得比較難寫的,主要的問題是,結點的分裂,對葉子結點的分裂和對非葉節點的分裂不一樣,還有就是當ptr->parent==NULL,需要新建父結點,而新建的結點始終是樹的根結點,還有結點分裂過程中子樹指針的變化還是很復雜的,不過終于實現了,分享一下我的代碼,可以直接運行,本程序沒有包含我編寫的其他頭文件,代碼如下,大家多多討論:另外,由于B樹不同于其他的樹,所有我考慮了一下,還是采用縮進格式來顯示B樹了,因為每個結點有多個關鍵碼,所以用廣義表形式不顯示不好。
#ifndef BTREE_H#define BTREE_H#include
8.求一段簡單的VB代碼
Private Sub Command1_Click() If Len(*) = 0 Then Exit Sub Dim T1 As String, T2 As String Dim I As Integer, Ts As String, Ti As Integer T1 = * If Len(T1) Mod 2 <> 0 Then Exit Sub Dim A() As Variant, B() As Variant A = Array(11, 38, 326, 132, 123) B = Array(212, 184, 989, 10, 71) For I = 1 To Len(T1) Step 2 Ts = Mid(T1, I, 1) Ti = Val(Mid(T1, I + 1, 1)) If Ts = "A" Then T2 = T2 + Trim(Str(A(Ti - 1))) ElseIf Ts = "B" Then T2 = T2 + Trim(Str(B(Ti - 1))) Else Exit Sub End If Next * = T2End Sub已經運行過,看還有什么問題沒有?。
9.寫一個簡短的C語言代碼
#include