读取二元组列表,打印目录的层级结构-----C++算法实现
要求是--某个文件中存储了一个最多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++算法实现的更多相关文章
- Java_File类讲解_打印目录树状结构_递归算法
package cn.xiaocangtian.testFile; import java.io.File; public class FileTree { public static void ma ...
- java File类 打印目录树状结构(递归)
import java.io.File; /** * 递归遍历 * */ public class FieTree { public static void main(String[] args) { ...
- python数据类型二(列表和元组)
一.列表 1.1 列表的介绍 列表是python的基本数据类型之一,其他编程语言也有类似的数据类型,比如JS中的数组,java中的数组等等,它是以[]括起来,每个元素用逗号隔开,而且可以存放各种数据类 ...
- python保存二维列表到txt文件,读取txt文件里面的数据转化为二维列表
源码: # 读文件里面的数据转化为二维列表 def Read_list(filename): file1 = open(filename+".txt", "r" ...
- JS读取/创建本地文件及目录文件夹的方法
原文链接:http://www.cnblogs.com/ayan/archive/2013/04/22/3036072.html 注:以下操作只在IE下有效! Javascript是网页制作中离不开的 ...
- Linux学习之二-Linux系统的目录结构
Linux学习之二-Linux系统的目录结构 在Linux的根目录下,有很多的目录,但是需要记住,对于Linux而言,一切皆文件.因此此处的目录也是文件.用ls / 命令就能看到根目录下的各类不同的目 ...
- 详解Dialog(二)——有关列表的构建
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 前言:这段时间真是忙啊忙啊忙,元旦三天假加了两天班,已经连续六周只放一天了,天天加班到十点多,真是有一口血吐在屏幕上的感觉了,博 ...
- linux常用终端命令(一)终端命令格式(二)文件和目录常用命令
一.linux终端命令格式 1.终端命令格式 command [-options] [parameter] 说明: command :命令名,相应功能的英文单词或单词的缩写 [-options] ...
- Python学习笔记(二)——列表
Python学习笔记(二)--列表 Python中的列表可以存放任何数据类型 >>> list1 = ['Hello','this','is','GUN',123,['I','Lov ...
随机推荐
- Dubbo限制大数据传输的解决方案
当service层向web层传输大数据容量的对象时,会受到Dubbo的限制,报类似如下异常: com.alibaba.dubbo.remoting.transport.AbstractCodec.ch ...
- 常用sql语句备份
1.查看数据库中所有的存储过程 use [DataBase_Name] go SELECT * FROM sys.all_objects WHERE ([type] = 'P' OR [type] = ...
- 自定义javascript日历控件
Web页中的日历一般离不开表格,通常都使用表格装载指定月的日期等信息.所以,要编写JS日历,首先必须解决的问题是表格的行与列问题.列是固定的,七列,因为一周有七天.行需要动态计算,因为,每一个月的第一 ...
- Hello Build To Win!我们是奶牛小分队!——记第一次团队作业
Hello Build To Win!我们是奶牛小分队! section 1 组建团队 1. 队员介绍: 姓名 学号 风格 擅长技术 编程兴趣 希望软工角色 吴建瑜 2016012024 努力学习, ...
- Ant学习--简单实例入门
步骤1.创建工程文件夹名字 F:\Helloworld 步骤2.编写java代码: package com.netease; public class Ant_test { public static ...
- IDEA04 工具窗口管理、各种跳转、高效定位、行操作、列操作、live template、postfix、alt enter、重构、git使用
1 工具窗口管理 所有的窗口都是在view -> tools windows 下面的,这些窗口可以放在IDEA的上下左右各个位置:右键某个窗口后选择move to 即可进行位置调整 2 跳转 2 ...
- Solidity oraclize解析Json格式数据
solidity虽然不能解析json数据但是oraclize_query可以直接处理: pragma solidity ^; import "github.com/oraclize/ethe ...
- sqlserver服务器硬件性能瓶颈分析
硬件性能瓶颈 内存 内存对SQL Server性能的影响胜过任何其他硬件.因此,对SQL Server系统的内存使用情况进行定期监视以确保内存的可用百分比高于20%是很有必要的.如果用户遭遇性能问题, ...
- 1710 生日蛋糕(1999 noi)
1710 生日蛋糕(1999 noi) 1999年NOI全国竞赛 题目描述 Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体 ...
- code1099 字串变换
BFS 听上去蛮简单的,实际编程复杂度较高(至少一个快睡着的人是这么认为的...) 抄的题解(感谢题解的作者<'_'>): #include<queue> #include&l ...