当前位置:网站首页>Implementation of adjacency table of SQLite database storage directory structure 2-construction of directory tree
Implementation of adjacency table of SQLite database storage directory structure 2-construction of directory tree
2022-07-08 00:53:00 【kupeThinkPoem】
Catalog
Two 、 Database storage directory structure adjacency table
2、 Code implementation build tree
One 、 summary
Storage directory structure ( Trees ) It's a common problem , There are many solutions . The main methods are adjacency tables 、 Advanced adjacency list 、 Improved preorder tree traversal 、 recursive query 、 Enumerate paths 、 Nested sets 、 Closure table, etc .
Two 、 Database storage directory structure adjacency table
The first and most elegant method we will try is called “ Adjacency table model ” or “ Recursive method ”. This is a good method , Because you only need a simple function to traverse your tree . In our food store , The adjacency table looks like this :

As you can see , In the adjacency table method , You saved the of each node “ Parent node ”. We can see ‘Pear’ yes ‘Green’ The son of , yes ‘Fruit’ My son, wait . The root node “Food” No parent value . For the sake of simplicity , I use “title” Value to identify each node . Of course , In a real database , You will use the number of each node id.
3、 ... and 、 Tree building
1、 data structure
Recently, I want to set multiple string information in a field of the database , How to intercept one of the strings ? Need to get the parentID This property performs the corresponding operation .
struct dirpro
{
char type;
char opType;
char parentID[32];
char rerserved[128-32-1-1];
};struct DirProNode
{
int id;
std::string name;
std::string parId;
QLinkedList<DirProNode> children;
};
struct DirInfo
{
int id;
std::string name;
dirpro pro;
};
2、 Code implementation build tree
DirProNode getTree()
{
std::vector<DirInfo> vInfos =getdirproFromDb();// Read all directory information from the database
DirProNode root;// The root node
root.id=-1;
root.parId="NULL";
root.name="root";
int nsize=vInfos.size();
std::map<std::string,DirProNode*> mapDirThink;
std::vector<bool> vecMark;
vecMark.resize(nsize);
for(int i=0;i<nsize;++i)
{
vecMark[i]=false;
}
while(true)
{
int ncount=0;
for(int i=0;i<nsize;++i)
{
if(vecMark[i])
{continue;}
DirProNode dirproNode;
if(convert(vInfos[i],dirproNode)
{
if(dirproNode.parId=="NULL" || dirproNode.parId.isEmpty())
{
root.children.push)back(dirproNode);
mapDirThink[QString::number(dirproNode.id).c_str()]=&(root.children.back());
ncount++;
vecMark[i]=true;
}
else
{
mapDirThink[dirproNode.parId]->children.push_back(dirproNode);
mapDirThink[QString::number(dirproNode.id).c_str()]=&(root.children.back());
ncount++;
vecMark[i]=true;
}
}
else
{
vecMark[i]=false;
}
}
if(ncount==0)
{break;}
}
return root;
}Four 、QTreeWidget Show tree
With DirProNode This data structure , We can use preorder traversal to build the directory structure and QTreeWidget Intermediate display .
边栏推荐
- A brief history of information by James Gleick
- Is it safe to open an account on the official website of Huatai Securities?
- 大数据开源项目,一站式全自动化全生命周期运维管家ChengYing(承影)走向何方?
- [Yugong series] go teaching course 006 in July 2022 - automatic derivation of types and input and output
- 基于人脸识别实现课堂抬头率检测
- Application practice | the efficiency of the data warehouse system has been comprehensively improved! Data warehouse construction based on Apache Doris in Tongcheng digital Department
- 51与蓝牙模块通讯,51驱动蓝牙APP点灯
- FOFA-攻防挑战记录
- The standby database has been delayed. Check that the MRP is wait_ for_ Log, apply after restarting MRP_ Log but wait again later_ for_ log
- My best game based on wechat applet development
猜你喜欢

测试流程不完善,又遇到不积极的开发怎么办?

接口测试进阶接口脚本使用—apipost(预/后执行脚本)

第一讲:链表中环的入口结点

Codeforces Round #804 (Div. 2)(A~D)

The standby database has been delayed. Check that the MRP is wait_ for_ Log, apply after restarting MRP_ Log but wait again later_ for_ log

NVIDIA Jetson test installation yolox process record

【obs】官方是配置USE_GPU_PRIORITY 效果为TRUE的

华为交换机S5735S-L24T4S-QA2无法telnet远程访问

他们齐聚 2022 ECUG Con,只为「中国技术力量」

基于卷积神经网络的恶意软件检测方法
随机推荐
Jemter distributed
Reentrantlock fair lock source code Chapter 0
Vscode software
How to add automatic sorting titles in typora software?
C language 001: download, install, create the first C project and execute the first C language program of CodeBlocks
Solution to the problem of unserialize3 in the advanced web area of the attack and defense world
Lecture 1: the entry node of the link in the linked list
丸子官网小程序配置教程来了(附详细步骤)
How is it most convenient to open an account for stock speculation? Is it safe to open an account on your mobile phone
什么是负载均衡?DNS如何实现负载均衡?
Course of causality, taught by Jonas Peters, University of Copenhagen
深潜Kotlin协程(二十三 完结篇):SharedFlow 和 StateFlow
【愚公系列】2022年7月 Go教学课程 006-自动推导类型和输入输出
【愚公系列】2022年7月 Go教学课程 006-自动推导类型和输入输出
Codeforces Round #804 (Div. 2)(A~D)
搭建ADG过程中复制报错 RMAN-03009 ORA-03113
DNS 系列(一):为什么更新了 DNS 记录不生效?
Reentrantlock fair lock source code Chapter 0
股票开户免费办理佣金最低的券商,手机上开户安全吗
【obs】官方是配置USE_GPU_PRIORITY 效果为TRUE的