當前位置:首頁 » 存儲配置 » 樹的存儲文件

樹的存儲文件

發布時間: 2022-04-03 02:48:57

㈠ 如何將B+樹存儲在磁碟中

樓主問的數據寫內存和寫磁碟的區別1.內存存取比較快2.磁碟存取數據是持久的,內存數據在程序關閉或者無引用被垃圾回收,是短時存在的。主要的區別就是這些吧。
關於寫入磁碟上,就是將內存中的數據存入磁碟的實體文件或資料庫中。

㈡ 樹的存儲結構轉換

//聲明樹中的類以及結點結構,文件名為tree.h
#ifndef TREE_H
#define TREE_H

template <class T>//樹中結點採用孩子兄弟表示法
struct TNode
{
T data;
TNode<T> *firstchild, *rightsib;
};

template <class T>
class Tree
{
public:
Tree( ); //構造函數,初始化一棵樹,其前序序列由鍵盤輸入
~Tree(void); //析構函數,釋放樹中各結點的存儲空間
TNode<T>* Getroot( ); //獲得指向根結點的指針
void PreOrder(TNode<T> *root); //前序遍歷樹
void PostOrder(TNode<T> *root); //後序遍歷樹
void LeverOrder(TNode<T> *root); //層序遍歷樹
private:
TNode<T> *root; //指向根結點的頭指針
void Release(TNode<T> *root); //析構函數調用
};

#endif

//定義類中的成員函數,文件名為tree.cpp
#include<iostream>
#include<string>
#include"tree.h"
using namespace std;
/*
*前置條件:樹不存在
*輸 入:無
*功 能:構造一棵樹
*輸 出:無
*後置條件:產生一棵樹
*/

template<class T>
Tree<T>::Tree( )
{
const int MaxSize = 100;
int end = 0;
int front = 0;
int rear = 0; //採用順序隊列,並假定不會發生上溢
int j = 0;
TNode<T>* queue[MaxSize]; //聲明一個隊列
TNode<T>* tempNode; //聲明指向結點類型的指針
TNode<T>* brotherNode; //工作指針
TNode<T>* q;
T ch;
cout<<"請輸入創建一棵樹的根結點數據"<<endl;
cin>>ch;
root = new TNode<T>;
root->data = ch;
root->firstchild = NULL;
root->rightsib = NULL;
queue[rear++] = root;
while (!end) //若繼續創建樹
{
T ch1,ch2;
cout<<"請輸入創建一棵樹的父結點數據和孩子結點數據"<<endl;
cin>>ch1>>ch2;
TNode<T>* p = new TNode<T>; //生成一個結點
p->data = ch2;
p->firstchild = NULL;
p->rightsib = NULL;
queue[rear++] = p;
tempNode = queue[front];//頭結點出隊,同時對頭元素的標識符後移
while(ch1 != tempNode->data)
tempNode = queue[front++];
if(tempNode->firstchild == NULL) tempNode->firstchild = p;
else{
brotherNode = tempNode->firstchild; //工作指針指向結點的第一個孩子
while (brotherNode != NULL) //若第一個孩子有兄弟結點
{
q = brotherNode;
brotherNode = brotherNode->rightsib;//工作指針指向第一個孩子的右兄弟
}
q->rightsib = p;
}
cout<<"創建結束? 如果結束請按1否則請按0 "<<endl;
cin>>end;
}
}
/*
*前置條件:樹已存在
*輸 入:無
*功 能:釋放樹中各結點的存儲空間
*輸 出:無
*後置條件:樹不存在
*/
template<class T>
Tree<T>::~Tree(void)
{
Release(root);
}
/*
*前置條件:樹已存在
*輸 入:無
*功 能:獲取指向樹根結點的指針
*輸 出:指向樹根結點的指針
*後置條件:樹不變
*/
template<class T>
TNode<T>* Tree<T>::Getroot( )
{
return root;
}
/*
*前置條件:樹已存在
*輸 入:無
*功 能:前序遍歷樹
*輸 出:樹中結點的一個線性排列
*後置條件:樹不變
*/
template<class T>
void Tree<T>::PreOrder(TNode<T> *root) //前序遍歷樹
{
if (root == NULL) return; //遞歸調用的結束條件
else{
cout<<root->data; //列印根節點
PreOrder(root->firstchild); //前序遞歸遍歷root的第一個孩子
PreOrder(root->rightsib); //前序遞歸遍歷root的右兄弟
}
}
/*
*前置條件:樹已存在
*輸 入:無
*功 能:後序遍歷樹
*輸 出:樹中結點的一個線性排列
*後置條件:樹不變
*/
template<class T>
void Tree<T>::PostOrder(TNode<T> *root)
{
if (root == NULL) return; //遞歸調用的結束條件
else{
PostOrder(root->firstchild); //後序遞歸遍歷root的第一個孩子
cout<<root->data; //列印出root結點
PostOrder(root->rightsib); //後序遞歸遍歷root的右兄弟
}
}
/*
*前置條件:樹已存在
*輸 入:無
*功 能:層序遍歷樹
*輸 出:樹中結點的一個線性排列
*後置條件:樹不變
*/
template<class T>
void Tree<T>::LeverOrder(TNode<T> *root)
{
const int MAX_QUEUE_SIZE = 100;
int front = 0;
int rear = 0; //採用順序隊列,並假定不會發生上溢
TNode<T>* queue[MAX_QUEUE_SIZE]; //聲明一個隊列
TNode<T>* tempNode; //聲明指向結點類型的指針
TNode<T>* brotherNode; //工作指針

if (root == NULL) return;//循環結束條件
queue[rear++] = root; //否則結點入隊
while (front != rear) //若隊列中有結點
{
tempNode = queue[front++];//頭結點出隊,同時對頭元素的標識符後移
cout<<tempNode->data; //列印出頭結點
brotherNode = tempNode->firstchild; //工作指針指向結點的第一個孩子
while (brotherNode != NULL) //若第一個孩子有兄弟結點
{
queue[rear++] = brotherNode; //第一個孩子結點入隊
brotherNode = brotherNode->rightsib;//工作指針指向第一個孩子的右兄弟
}
}
}
/*
*前置條件:樹已經存在
*輸 入:無
*功 能:釋放樹的存儲空間,析構函數調用
*輸 出:無
*後置條件:樹不存在
*/
template <class T>
void Tree<T>::Release(TNode<T>* root)
{
if (root != NULL){
Release (root->firstchild); //釋放第一個孩子
Release (root->rightsib); //釋放右兄弟
delete root;
}
}
//有關樹的實現的主函數,文件名為treemain.cpp
#include <iostream>
#include <string>
#include"tree.cpp"
using namespace std;

void main()
{
Tree<string> t; //創建一棵樹
TNode<string>* p = t.Getroot( ); //獲取指向根結點的指針
cout<<"------前序遍歷------ "<<endl;
t.PreOrder(p);
cout<<endl;
cout<<"------後序遍歷------ "<<endl;
t.PostOrder(p);
cout<<endl;
cout<<"------層序遍歷------ "<<endl;
t.LeverOrder(p);
cout<<endl;
}

㈢ 樹的存儲結構

常用的有:1、雙親表示,2、孩子鏈表表示,3、雙親孩子鏈表表示,4、孩子兄弟鏈表表示

㈣ 數據結構,樹的常用存儲方式

存入文本文件,每行:孩子節點-父節點。
這樣也方便用Hadoop進行處理。

㈤ 怎麼將一個樹保存到文件里

你這樣保存,kd_node結構體中kd_left,kd_right中保存的是指針,當然會出錯。你應該把結構體寫到數組中。kd_left,kd_right中保存數組下標就行 了

㈥ 怎樣把樹存到磁碟中

樹就是一個數據結構的鏈表,你把鏈表使用二進制流存到硬碟中,下次再把這個存在磁碟中的文件讀入鏈表就可以了。

㈦ 如何將數據以樹的形式存儲在內存中

1、棧區(stack):由編譯器自動分配和釋放 ,存放函數的參數值、局部變數的值等,甚至函數的調用過程都是用棧來完成。其操作方式類似於數據結構中的棧
2、堆區(heap) :一般由程序員手動申請以及釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式類似於鏈表
3、全局區(靜態區)(static):全局變數和靜態變數的存儲是放在一塊的,初始化的全局變數和靜態變數在一塊區域, 未初始化的全局變數和未初始化的靜態變數在相鄰的另一塊區域。程序結束後由系統釋放空間
4、文字常量區:常量字元串就是放在這里的。 程序結束後由系統釋放空間
5、程序代碼區:存放函數體的二進制代碼

㈧ 樹的存儲方法主要有哪些

三叉鏈表不就是存儲結構,其具體實現既可以用指針實現,也可以用數組實現 至於遍歷方法可以任意地在二叉樹中上下

㈨ 如何在磁碟上以文件形式存儲一棵樹

參考以下代碼: #include <stdio.h> //定義二叉樹的存儲結構 struct BTNode { char data; BTNode* lchild; BTNode* rchild; }BTNode; void Ctree(struct BTNode* t,char A[],int i) { if(t!=NULL) { A[i]=t->data; Ctree(t->lchild,A,i*2); Ctree(t->rchild,A,i*2+1); } else { A[i]=' '; } } int main(void) { //建立二叉鏈表存儲結構的二叉樹,以p1為根節點,p2,p3分別為p1的左右子樹,p4為p3的左子樹 struct BTNode p1,p2,p3,p4; struct BTNode *t=&p1; p1.data='a'; p2.data='b'; p3.data='c'; p4.data='d'; p1.lchild=&p2; p1.rchild=&p3; p2.lchild=NULL; p2.rchild=NULL; p3.lchild=&p4; p3.rchild=NULL; p4.lchild=NULL; p4.rchild=NULL; char A[20]={NULL}; //定義字元數組存儲轉換後的二叉樹存儲結構 Ctree(t,A,1); //調用上述轉換演算法 //顯示結果 printf("以下是轉換後數組的值:\n"); for(int i=1;i<20;i++) { if(A[i]!=NULL) printf("A[%d]=%c\n",i,A[i]); } return 0; }

㈩ 如何在資料庫中存儲一棵樹

假設有如下一棵樹:

這種結構下,如果查詢某一個節點的直接子節點,十分容易,比如要查詢D節點的子節點。

熱點內容
華為java編程規范 發布:2024-06-14 22:19:31 瀏覽:575
無線伺服器更換ip 發布:2024-06-14 22:05:56 瀏覽:943
網頁登陸腳本 發布:2024-06-14 22:05:55 瀏覽:26
dos命令進入d盤文件夾 發布:2024-06-14 21:52:58 瀏覽:117
蘋果6怎麼改4位密碼 發布:2024-06-14 21:52:19 瀏覽:440
分時系統需要什麼配置 發布:2024-06-14 21:52:08 瀏覽:731
安卓腳本精靈教程 發布:2024-06-14 21:30:45 瀏覽:218
Re蕾姆本子ftp 發布:2024-06-14 21:28:09 瀏覽:257
mysql資料庫應用pdf 發布:2024-06-14 21:26:43 瀏覽:113
access中sql查詢語句 發布:2024-06-14 21:26:01 瀏覽:349