要求是--某个文件中存储了一个最多3层的层级结构,其中每个元素都是一个自然数,它的存储方法是一个二元组的列表,每个二元组的形式为:(元素,父元素)。现在希望能够通过读取该二元组列表,打印出目录的层级结构。

源代码部分

文件Element.h:
#include <string>
#include <vector>
class CElement
{
public:
CElement(void);
~CElement(void);
std::vector<CElement> getChild(std::vector<CElement> v); public:
int ele1;
int ele2;
int level;
CElement *child;
std::string output;
}; 文件Element.cpp:
#include "Element.h" CElement::CElement(void)
{
} CElement::~CElement(void)
{
} std::vector<CElement> CElement::getChild(std::vector<CElement> v)
{
std::vector<CElement> e;
std::vector<CElement>::iterator first = v.begin();
std::vector<CElement>::iterator last = v.end();
for(;first != last;++first)
{
if(first->ele2 == ele1)
e.push_back( *first);
}
return e;
}
文件main.cpp
#include "Element.h"
#include <iostream>
#include <vector> void setLevel(std::vector<CElement> &v)
{
std::vector<CElement>::iterator first = v.begin();
std::vector<CElement>::iterator last = v.end();
for(; first != last; ++first)
{
if(first->ele2 == 0)
{
first->level = 1;
}
else
{
std::vector<CElement>::iterator beg = v.begin();
std::vector<CElement>::iterator ed = v.end();
for(; beg != ed; ++beg)
{
if(first->ele2 == beg ->ele1)
{
if(beg->ele2 == 0)
first->level = 2;
else
first->level = 3;
} }
}
}
} int _tmain(int argc, _TCHAR* argv[])
{
int a[16][2] = {
{1,},{5,1},{6,1},{12,6},{13,6},{2,},{3,},{4,},{7,1},{8,2},{9,2},{10,3},{11,8},{14,5},{15,3},{16,15}
};
std::vector<CElement> v;
for(int i = 0;i < 16; i++)
{
CElement e;
e.ele1 = a[i][0];
e.ele2 = a[i][1];
v.push_back(e);
}
setLevel(v);
std::vector<CElement>::iterator first = v.begin();
std::vector<CElement>::iterator last = v.end();
/*
for(; first != last; ++first)
{
std::cout<< (*first).ele1<<" "<< (*first).ele2<< " "<<(*first).level<<std::endl;
}
*/
std::vector<CElement> v1;
std::vector<CElement> v2;
for(; first != last; ++first)
{
if(first->level==1)
{
std::cout<<first->ele1<<std::endl;
v1 = first->getChild(v);
for(int j =0;j<v1.size();++j)
{
std::cout<<"-"<<v1[j].ele1<<std::endl;
v2 = v1[j].getChild(v);
if(v2.size() > 0)
for(int k =0;k<v2.size();++k)
std::cout<<"--"<<v2[k].ele1<<std::endl;
}
}
}
int t;
std::cin>>t;
return 0;
}

实际跑出来的图

读取二元组列表,打印目录的层级结构-----C++算法实现的更多相关文章

  1. Java_File类讲解_打印目录树状结构_递归算法

    package cn.xiaocangtian.testFile; import java.io.File; public class FileTree { public static void ma ...

  2. java File类 打印目录树状结构(递归)

    import java.io.File; /** * 递归遍历 * */ public class FieTree { public static void main(String[] args) { ...

  3. python数据类型二(列表和元组)

    一.列表 1.1 列表的介绍 列表是python的基本数据类型之一,其他编程语言也有类似的数据类型,比如JS中的数组,java中的数组等等,它是以[]括起来,每个元素用逗号隔开,而且可以存放各种数据类 ...

  4. python保存二维列表到txt文件,读取txt文件里面的数据转化为二维列表

    源码: # 读文件里面的数据转化为二维列表 def Read_list(filename): file1 = open(filename+".txt", "r" ...

  5. JS读取/创建本地文件及目录文件夹的方法

    原文链接:http://www.cnblogs.com/ayan/archive/2013/04/22/3036072.html 注:以下操作只在IE下有效! Javascript是网页制作中离不开的 ...

  6. Linux学习之二-Linux系统的目录结构

    Linux学习之二-Linux系统的目录结构 在Linux的根目录下,有很多的目录,但是需要记住,对于Linux而言,一切皆文件.因此此处的目录也是文件.用ls / 命令就能看到根目录下的各类不同的目 ...

  7. 详解Dialog(二)——有关列表的构建

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 前言:这段时间真是忙啊忙啊忙,元旦三天假加了两天班,已经连续六周只放一天了,天天加班到十点多,真是有一口血吐在屏幕上的感觉了,博 ...

  8. linux常用终端命令(一)终端命令格式(二)文件和目录常用命令

    一.linux终端命令格式 1.终端命令格式 command  [-options]  [parameter] 说明: command :命令名,相应功能的英文单词或单词的缩写 [-options] ...

  9. Python学习笔记(二)——列表

    Python学习笔记(二)--列表 Python中的列表可以存放任何数据类型 >>> list1 = ['Hello','this','is','GUN',123,['I','Lov ...

随机推荐

  1. Eclipse 常用插件地址大全

    安装方式: 使用Eclipse 的自动升级功能,菜单栏选[ Help ]→[ install new Software]  点击[Add]按钮,在“ Name ”中填入“ name (填写一个自己喜欢 ...

  2. BAT脚本编写教程

    windows批处理 (cmd/bat) 编程详解 开始之前先简单说明下cmd文件和bat文件的区别:在本质上两者没有区别,都是简单的文本编码方式,都可以用记事本创建.编辑和查看.两者所用的命令行代码 ...

  3. 编译boost.log模块遇到的一些问题

    线上日志用到的是日志库,在全局有一个锁,导致在高并发的时候,容易因为锁竞争问题导致时延.在某些情况下,会因为同一个用户,同时访问某个变量,导致读写冲突使线上服务整体core掉(考虑到请求的间隔,为了应 ...

  4. delphi三层架构

    我们的delphi程序很多是以前开发的,采用典型的CS架构,由程序直接连接数据库.现在需要改成在外网可以直接操作软件.先把数据库搬到了阿里云上,测试发现直接连数据库和VPN连接测试速度很慢,直连还容易 ...

  5. 从零玩转JavaWeb系列7web服务器-----用户登录界面二维码的制作

    1.用eclipse工具新建一个Dynamic Web Project工程如下: 2.在Java Resources的src目录下新建一个包,包名称为com.it666.code 3.在com.it6 ...

  6. centos7 vnc server

    yum -y install vnc *vnc-server* vncserver vncserver :2 vncserver -geometry 1900x1024 =============== ...

  7. Gouraud Shading

    [Gouraud Shading] Gouraud Shading (高洛德着色/高氏着色) 这种着色的效果要好得多,也是在游戏中使用最广泛的一种着色方式.它可对3D模型各顶点的颜色进行平滑.融合处理 ...

  8. CSS隐藏元素 display visibility opacity的区别

    { display: none; /* 不占据空间,无法点击 */ }  { visibility: hidden; /* 占据空间,无法点击 */ }  { position: absolute; ...

  9. Python遍历一个文件夹下有几个Excel文件及每个Excel文件有几个Sheet

    一. 解决问题: 工作中常会遇到合并Excel文件的需求,Excel文件数量不确定,里面的Sheet 数量是可变的,Sheet Name是可变的,所以,需要用到遍历一个文件夹下有几个Excel文件,判 ...

  10. T-sql GroupBy语句常见问题处理

    1.问题描述 现在有一张course表(含课程编号和名称)和一张sc表(含学生学号,选修课程的编号以及考试成绩),如下:现在想要查询所有课程编号.对应的课程名称以及选修该课程的所有学生的平均成绩.一开 ...