要求是--某个文件中存储了一个最多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. 【转】运输层TCP协议详细介绍

    TCP是TCP/IP协议族中非常复杂的一个协议.它具有以下特点: 1:面向连接的运输层协议.在使用TCP协议之前,首先需要建立TCP连接.传送数据完毕后,必须释放已经建立的TCP连接. 2:一条TCP ...

  2. bps、bit、byte的区别

    bps是速度单位,bit是大小单位,byte也是大小单位1bps=1bit每秒, 8bit=1byte 1 Byte = 8    bits1 KB   = 1024 Bytes1 MB   = 10 ...

  3. shell编程——日志输出的同时显屏

    在执行脚本的时候我们常常需要将执行过程全部输出到日志里,以备出现报错时可以跟踪分析,开始我用的是exec: exec 1>info.log #把全部执行过程输出到info日志中 exec 2&g ...

  4. golang怎么使用redis,最基础的有效的方法

    最近在学GO语言,我自己也喜欢使用redis,于是乎就顺便把go操作redis的方法也给学了,有个第三方包,在GitHub上面找的 go get github.com/alphazero/Go-Red ...

  5. Scala基础:面向对象之trait

    trait类似于java中的interface,但是有所不同 Scala中的trait是一种特殊的概念: 首先先将trait作为接口使用,此时的trait就与Java中的接口 (interface)非 ...

  6. Activiti操作数据库中文乱码

    不要忘了修改数据库表的编码格式,除了数据库的编码格式要修改之外,数据库表的编码格式也要修改,修改为:

  7. java动态规划导弹问题

    这是一道动态规划题,和昨天的取硬币还有最长公共字串有点类似. 1.题目描述:                        某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一 ...

  8. sudo问题汇总

    1. 注释Defaults requiretty Defaults requiretty修改为 #Defaults requiretty, 表示不需要控制终端. 否则会出现sudo: sorry, y ...

  9. [C++] const inside class VS const outside class

    const inside class VS const outside class 类内:类内的const和c语言一样,可以通过指针间接修改const变量的值,读内存,一开始必须初始化 类外:虽然可以 ...

  10. maven添加阿里仓库

    1.修改settings.xml 在maven的settings.xml 文件里配置mirrors的子节点,添加如下mirror <mirror> <id>nexus-aliy ...