《数据结构实战》模拟文件系统目录组织------树的应用
来源:互联网 发布:netbeans php下载 编辑:程序博客网 时间:2024/05/17 11:05
简单模拟文件系统的目录组织,多节点树的应用,为求简单,没有进行错误处理。代码如下:
#ifndef __CFILEDIRECTORY__H#define __CFILEDIRECTORY__H#include <iostream>#include <queue>// 文件系统目录结构const int MAX_LEN = 128;struct TreeNode {char szName[MAX_LEN]; // 文件或者目录的名字TreeNode* pFirstChild; // 第一个儿子节点TreeNode* pNextSibling; // 第一个儿子节点的兄弟节点TreeNode(){memset(szName, 0, sizeof(szName));pFirstChild = NULL;pNextSibling = NULL;}};class CFileDirectory{public:CFileDirectory(char* strName); // 根目录~CFileDirectory();public:bool MakeDirectory(char* strParentDir, char* strDirName); // 创建目录bool MakeFile(char* strPath, char* strFileName); // 在路径下创建文件void PrintAllFile(); // 打印所有文件private:TreeNode* FindNode(TreeNode* pNode, char* strName); //寻找节点void PrintAllFile(TreeNode* pNode, std::queue<std::string>& queueNodeName); // 打印所有文件void DeleteNode(TreeNode*& pNode);private:struct TreeNode* m_pRoot; // 文件路径根目录};#endif
#define _CRT_SECURE_NO_WARNINGS#include "FileDirectory.h"#include <string.h>CFileDirectory::CFileDirectory(char* strName) // 根目录{m_pRoot = new struct TreeNode;strcpy(m_pRoot->szName, strName);}CFileDirectory::~CFileDirectory(){DeleteNode(m_pRoot);}bool CFileDirectory::MakeDirectory(char* strParentDir, char* strDirName){if (strParentDir[0] != '/') // 第一个必须是 /是根目录return false;strParentDir++; // 跳过根目录char* pTemp = strParentDir;TreeNode* pFind = m_pRoot;int iFindeIndex = 0;for (int i = 0; i < strlen(pTemp); i++) // 从前往后找{if (*(pTemp + i) == '/'){char pDirName[128] = { 0x00 };memcpy(pDirName, pTemp + iFindeIndex, i - iFindeIndex);iFindeIndex = i;pFind = FindNode(pFind, pDirName);if (!pFind)return false;}}// 创建目录if (!pFind->pFirstChild) // 没有第一个孩子节点 创建{TreeNode* pNode = new TreeNode;strcpy(pNode->szName, strDirName);pFind->pFirstChild = pNode;return true;}TreeNode* pNodeSlib = pFind->pFirstChild->pNextSibling;if (!pNodeSlib){TreeNode* pNode = new TreeNode;strcpy(pNode->szName, strDirName);pFind->pFirstChild->pNextSibling = pNode;return true;}else{while (pNodeSlib->pNextSibling)pNodeSlib = pNodeSlib->pNextSibling;TreeNode* pNode = new TreeNode;strcpy(pNode->szName, strDirName);pNodeSlib->pNextSibling = pNode;return true;}}bool CFileDirectory::MakeFile(char* strPath, char* strFileName){return MakeDirectory(strPath, strFileName);}TreeNode* CFileDirectory::FindNode(TreeNode* pNode, char* strName){if (!pNode)return NULL;if (strcmp(pNode->szName, strName) == 0)return pNode;TreeNode* pTemp;pTemp = FindNode(pNode->pFirstChild, strName);if (!pTemp)pTemp = FindNode(pNode->pNextSibling, strName);return pTemp;}void CFileDirectory::PrintAllFile() // 打印所有文件{std::queue<std::string> queueNode;PrintAllFile(m_pRoot, queueNode);}void CFileDirectory::PrintAllFile(TreeNode* pNode, std::queue<std::string>& queueNodeName){if (!pNode->pFirstChild) // 没有节点了 是文件 打印{std::queue<std::string> queueAfter;queueAfter = queueNodeName; // 保存父目录queueNodeName.push(pNode->szName);while (!queueNodeName.empty()){std::string str = queueNodeName.front();std::cout << str.c_str() << "/";queueNodeName.pop();}queueNodeName.swap(queueAfter); // 交换std::cout << std::endl;}if (pNode->pFirstChild){queueNodeName.push(pNode->szName);PrintAllFile(pNode->pFirstChild, queueNodeName);}if (pNode->pNextSibling)PrintAllFile(pNode->pNextSibling, queueNodeName);}void CFileDirectory::DeleteNode(TreeNode*& pNode){if (!pNode)return;DeleteNode(pNode->pFirstChild);DeleteNode(pNode->pNextSibling);delete pNode;pNode = NULL;return;}#include <iostream>#include "FileDirectory.h"int main(){CFileDirectory *fileSystem = new CFileDirectory("/");fileSystem->MakeDirectory("/", "user");fileSystem->MakeFile("/user/", "password.txt");fileSystem->MakeFile("/user/", "hello.txt");fileSystem->MakeFile("/user/", "world.txt");fileSystem->MakeDirectory("/", "log");fileSystem->PrintAllFile();delete fileSystem;std::cin.get();}
阅读全文
0 0
- 《数据结构实战》模拟文件系统目录组织------树的应用
- ext3文件系统目录组织
- 文件系统的存储组织
- 组织数据结构的能力
- FAT文件系统的组织结构
- linux 文件系统的组织方式
- LINUX文件系统的目录树
- Linux文件系统的目录树
- WINCE代码的目录组织
- Windows CE的目录组织
- WINCE代码的目录组织
- Windows CE的目录组织
- Windows CE的目录组织
- Windows CE的目录组织
- jvm目录的组织结构
- 模拟的多级文件系统
- UNIX文件系统的路径组织结构
- 软盘与FAT12文件系统的组织格式
- MySQL查询数据表中表字段及其注释
- opencv中的harris角点检测函数
- “傻瓜”式填充,自定义LayoutManager
- 《UNIX网络编程 卷1》 笔记: TCP 客户/服务器程序示例
- 『ORACLE』 对永久表空间进行DDL操作(11g)
- 《数据结构实战》模拟文件系统目录组织------树的应用
- 原生Hibernate和Jpa Hibernate
- HDU 1111 Piggy-Bank(完全背包例题)
- Python笔记(6)----列表、元组、字符串、字典等的相关用法
- 方法的调用-----求一个质数
- java高精度数字
- CPU核数跟多线程的关系
- wm8960驱动:裸机代码研读
- bzoj 2645: Vijos1676 陶陶吃苹果 (树形DP)