搜档网
当前位置:搜档网 › 树的遍历:文件目录结构的显示

树的遍历:文件目录结构的显示

树的遍历:文件目录结构的显示
树的遍历:文件目录结构的显示

数据结构课程设计报告

树的遍历:文件目录结构的显示

专业 计算机科学与技术

学生姓名 ****

班级 计算机***

学号 *****

指导教师 徐燕萍

完成日期

2014年7月4日

目录

1、设计内容 (2)

2、设计分析 (3)

2.1建立树形链表结构的函数PARSE() (3)

2.2目录大小重新计算函数RE S IZE() (4)

2.3输出树形结构的函数OUT P UT() (5)

3、设计实践 (5)

4、测试方法 (14)

4.1测试目的 (14)

4.2测试输入 (15)

4.3正确输出 (15)

4.4实际输出 (17)

5 程序运行效果 (19)

5.1测试结果分析 (19)

5.2探讨与改进 (19)

6 设计心得 (20)

1

树的遍历:文件目录结构的显示

1、设计内容

给出Unix下目录和文件信息,要求编程实现将其排列成一定缩进的树。具体要求如下。输入要求:

输入数据包含几个测试方案。每一个案例由几行组成,每一行都代表了目录树的层次结构。第一行代表目录的根节点。若是目录节点,那么它的孩子节点将在第二行中被列出,同时用一对圆括号“()”界定。同样,如果这些孩子节点钟某一个也是目录的话,那么这个目录所包含的内容将在随后的一行中列出,有一对圆括号将首位界定。目录的输入格式为:*name size,文件的输入格式为:name size,其中*代表当前节点的目录,name代表文件或目录的名称,由一串长度不大于10的字符组成,并且name字符串中不能包含有‘(’,‘)’,‘[’,‘]’,‘*’。size是该文件/目录的大小,为大于0的整数。每一个案例中最多只能包含10层,每一层最多有10个文件/目录。

输出要求:

对每一个测试案例,输出时要求:第d层的文件/目录名前面需要插入8*d个空格,兄弟节点之间要在同一列上。不要使用Tab(制表符)来统一输出的缩进。每一个目录的大小(size)是它包含的所有子目录和文件大小以及它自身大小的总和。

输入例子:

*/usr1

(*mark 1 *alex 1)

(hw.c3 *course 1)(hw.c 5)

(aa.txt 12)

*/usr 1

()

表示含有两个不同的根目录,目录名都是/usr,第一个根目录/usr 下包含mark和alex两个子目录,mark目录下包含大小为3的文件hw.c和子目录course,alex目录下有一个大小为5的文件hw.c,子目录course下包含文件aa.txt,其大小为12;第二个根目录/usr下为空。

2

输出例子:

|_*usr[24]

|_*mark[17]

| |_hw.c[3]

| |_*course[13]

| |_aa.txt[12]

|_*alex[6]

|_hw.c[5]

|_*/usr[1]

2、设计分析

目录结构是一种典型的树形结构,为了方便对目录的查找、遍历等操作,可以选择孩子兄弟双亲链表来存储树的结构。程序中要求对目录的大小进行重新计算,根据用户的输入来建立相应的孩子兄弟双亲链表,最后输出树形结构。可以引用一个Tree类,将树的构造、销毁、目录的大小重新计算(reSize)、建立树形链表结构(parse)、树形结构输出(outPut)等一系列操作都封装起来,同时对于每一个树的节点,它的私有变量除了名称(Name)、大小(Size)和层数(Depth)之外,根据孩子兄弟双亲链表表示的需要,还要设置三个指针,即父指针(Tree*parent)、下一个兄弟指针(Tree*NextSibling)和第一个孩子指针(Tree*FirstChild)。

2.1 建立树形链表结构的函数parse()

根据输入来确定树形关系时,首先读取根节点目录/文件名和大小值,并根据这些信息建立一个新的节点;然后读入后面各行信息,对于同一括号中的内容,即具有相同父节点的那些节点建立兄弟关联。这个函数实际上是采取遍历建立树形链表结构。

定义一个Tree*类型的数组treeArray[],用来存放目录的节点信息,并定义两个整型变量head和rear,head值用来标记当前节点的父节点位置,每处理完一对括号,head需要增加1,即下一对待处理括号的父节点在treeArray[]中要往后移一个位置。如果当前处理的节点是目录类型,则将它放在treeArray[]数组中,rear是treeArray[]的下标变

3

量,加入一个目录节点信息,rear就增加1;如果是文件类型的目录,则需要按照Name和Size建立一个树的节点,并和head所指的父节点建立关联,但是不用放入treeArray[]中。

为进一步说明这个树形链表结构的构成,可参考图3-1。

treeArray[]

图3-1通过parse()构建的数据结构事例

它是根据如下的具体输入例子所形成的结构示意。

输入:

*/usr1

(*mark 1 *alex 1)

(hw.c3 *course 1)(hw.c 5)

(aa.txt 12)

形成的数据结构如图2.5所示。

2.2 目录大小重新计算函数reSize()

输入数据中对目录大小的初始值一般为1,而目录的真正大小应该是自身的大小和它包含的所有文件及子目录的大小之和。因此,在计算目录大小的时候,需要遍历它下面所有的文件和子目录,可以采用递归嵌套的后序遍历方式。另外要注意,采用孩子兄弟双亲链表表示时,父目录下的所有子目录和子文件都在该父目录的左

4

子树上(右子树第一个节点是该目录的兄弟节点),所以白努力的时候只需要遍历目录对的左子树即可。

2.3输出树形结构的函数outPut()

输出是一个先序遍历的过程。为完成对树形的输出,兄弟目录之间需要相同的缩进,用‘|’上下相连,而父子目录或父目录和子文件之间需要设定正确的缩进,子目录或子文件要比父目录向右缩进8个空格。设置一个标志数组flag[11](每个目录下最大的层次数为10),当前Tree*temp指针所指的节点如果有兄弟节点,则置flag数组值为1,否则置为0;并由此节点反复查询它的祖先节点的情况,直到根节点为止。输出时,遇到flag[]=1时,屏幕输出“| ”,表明是兄弟节点;遇到flag[]=0则输出“”,有相同的缩进,而子节点总比父节点向右缩进8个空格。

2.4消除输入中多余空格的函数skipWhiteSpace(string &s,int *i)

从用户输入数据中读入一行后,调用该函数来跳过s字符串中s[i]之后的空格,以方便后面的处理。

此外,关于读入目录名称、大小,以及将string类型的Size值转换成int类型的函数的实现,相对比较简单,此处不再赘述。

3、设计实践

利用visual c++,新建一个c++文件,将以下代码输入。

#include

#include

#include

using namespace std;

string s = "";

int startPos = 0;

ofstream outfile;

ifstream infile;

/**构造Tree类**/

class Tree{

string Name; /* 树的根结点名称 */

int Size; /* 树的大小,用于统计这棵树本身及其包含的所以子

5

树大小的总和*/

Tree* FirstChild; /* 指向它的第一个孩子结点 */

Tree* NextSibling; /* 指向它的下一个兄弟结点 */

Tree* parent; /* 指向双亲结点 */

public:

Tree(string Name = "", int Size = 0);/* 构造函数 */

void parse(); /* 根据输入数据来建立树形结构 */

void reSize(); /* 重新统计树结点的大小 */

void outPut(); /* 输出树形结构 */

~Tree(); /* 析构函数 */

};

/*** 树结点数组treeArray[],以及用来标注双亲结点位置的head和目录结点的rear***/

Tree* treeArray[100];

int head = 0, rear = 0;

/*** 建立只有一个结点的树,其三个指针域均为空 ***/

Tree::Tree(string Name, int Size){

this->Name = Name;

this->Size = Size;

FirstChild = NULL;

NextSibling = NULL;

parent = NULL;

}

/*** 析构函数,删除同一根结点下的各个子结点,释放空间 ***/

Tree::~Tree()

{

Tree* temp;

Tree* temp1;

temp = FirstChild;

while(temp != NULL)

6

{

temp1 = temp;

temp = temp->NextSibling;

delete temp1;

}

}

/* 先序遍历根结点下的所有结点,将每一个结点的Size值都加到根结点的Size中去**/

void Tree::reSize()

{

Tree* temp = this;

/*** 如果当前的结点没有孩子结点,则它的Size值不变,即为输入时候的值 ***/

if(temp->FirstChild != 0){

temp = temp->FirstChild;

while(temp != 0){

temp->reSize();

Size += temp->Size;

temp = temp->NextSibling;

}

}

}

/***检查Name中有无非法字符**************/

bool checkName(string s)

{

if(s[0]!='*' && s.length() > 10)

return false;

if(s[0]=='*' && s.length() > 11)

return false;

if(s[0]!='*' && (s[0]=='(' || s[0]==')' || s[0]=='[' || s[0]==']')) return false;

7

for(int i=1;i

if(s[i]=='*' || s[i]=='(' || s[i]==')' || s[i]=='[' || s[i]==']') return false;

}

return true;

}

/*** 按照先序遍历的方式有缩进地来输出树形结构 ***/

void Tree::outPut()

{

Tree* temp; /*用来指向当前结点的祖先结点*/

Tree* temp1;

bool flag[11];/*用来标志输出缩进、层次情况的数组*/

int i;

outfile.open("output.txt",ios::app);

if(!outfile){

cout<<"cannot append the output file.\n";

exit(0);

}

if(!checkName(Name)){

cout<<"input error!--"<

exit(0);

}

outfile<<"|_"<

outfile.close();

/* 输出当前的结点信息 */

temp1= FirstChild;/* 用来指向当前结点的子结点 */

while(temp1 != NULL)

{

outfile.open("output.txt",ios::app);

if(!outfile){

8

cout<<"cannot append the output file.\n";

exit(0);

}

i = 0;

temp = temp1;

while(temp->parent != NULL)

{

/*当前temp指针所指的结点如果有兄弟结点,则置flag数组值为1,否则置为0;并由此结点反复查询它的祖先结点的情况,直到根结点为止*/

if(i>=10){

//检查当前的父目录包含的子文件(或目录数)是否大于10;

cout<<"input error!--dictionary contains more than 10 levels."<

exit(0);

}

temp = temp->parent;

if(temp->NextSibling != NULL)

flag[i++] = true;

else

flag[i++] = false;

}

/*兄弟结点之间有相同的缩进,子结点比父结点向右缩进8个空格*/

while(i--)

{

if(flag[i] == true)

outfile<<"| ";

else

outfile<<" ";

}

outfile.close();

temp1->outPut();

temp1 = temp1->NextSibling;

}

9

}

/*** 跳过字符串s中,第(*i)个之后多余的空格 ***/

void skipWhiteSpace(string& s, int* i)

{

while(s[*i] == '\t' || s[*i] == ' ')

(*i)++;

}

/*** 获取输入行中一对'()'之间的字符串,即为同一双亲结点下的子结点***/

string getSubDir(string& line, int* startPos)

{

string res = "";

skipWhiteSpace(line,startPos);

while(line[*startPos] != ')')

res += line[(*startPos)++];

res += line[(*startPos)++];

skipWhiteSpace(line, startPos);

return res;

}

/*** 由于用户输入时候目录的大小Size值为String类型,因此需要将它转变成integer类型***/

int stringToNum(string s)

{

int num = 0;

unsigned int i = 0;

while(i < s.length())

{

num *= 10;

num += s[i++] - '0';

}

10

return num;

}

/*** 提取目录/文件的名称 ***/

string getName(string& s, int* i)

{

string name = "";

while(s[*i] != ' ' && s[*i] != '\t')

name += s[(*i)++];

return name;

}

/*** 提取目录/文件的大小,然后将string类型转换成integer类型 ***/

int getSize(string&s, int* i)

{

string size = "";

while((unsigned int)(*i) < s.length() && s[*i] != ' ' && s[*i] != '\t' && s [*i] != ')')

size += s[(*i)++];

return stringToNum(size);

}

/*** 根据用户的输入字符串来构建树的结构 ***/

void Tree::parse()

{

Tree* temp;

string line;

string name;

int size;

/***head值用来标记当前结点的双亲结点位置;如果当前处理的结点是目录类型,则将它放在treeArray[]数组中,下标用rear来记录;如果是文件类型的目录,只需要按照name和size建立一个树的结点,但是不用放入treeArray[]中***/

11

while(getline(infile,line,'\n'))

{

startPos = 0;

while(1)

{

s = getSubDir(line, &startPos);

int i = 1;

skipWhiteSpace(s, &i);

if(s[i] != ')')

{

skipWhiteSpace(s,&i);

name = getName(s,&i);

skipWhiteSpace(s,&i);

size = getSize(s,&i);

temp = treeArray[head%100]->FirstChild = new Tree(name,size);

temp->parent = treeArray[head%100];

if(name[0] == '*')

treeArray[(rear++)%100] = temp;

skipWhiteSpace(s,&i);

}

while(s[i] != ')')

{

skipWhiteSpace(s,&i);

name = getName(s,&i);

skipWhiteSpace(s,&i);

size = getSize(s,&i);

temp->NextSibling = new Tree(name,size);

skipWhiteSpace(s,&i);

temp = temp->NextSibling;

temp->parent = treeArray[head%100];

if(name[0] == '*')

treeArray[(rear++)%100] = temp;

}

12

head ++;

/***测试是否一行扫描完毕***/

if((unsigned int)startPos >= line.length())

break;

}

/***只有一个根结点的情况***/

if(head == rear)

break;

}

}

/////////////////////////////////////////////////////////// //**** 主测试文件main.cpp******/////

////////////////////////////////////////////////////////// int main()

{

Tree* fileTree;

string s;

string name;

int size;

outfile.open("output.txt");

if(!outfile){

cout<<"cannot open the output file!\n";

exit(0);

}

outfile<<"The result is as follows:\n";

outfile.close();

infile.open("input.txt",ios::out);

if(!infile){

cout<<"cannot open the input file!\n";

exit(0);

13

}

while(getline(infile,s,'\n'))

{

int i = 0;

skipWhiteSpace(s, &i);

name = getName(s,&i);

skipWhiteSpace(s,&i);

size = getSize(s,&i);

fileTree = new Tree(name, size);

if(name[0] == '*')

{

treeArray[rear++] = fileTree;

fileTree->parse();

}

fileTree->reSize();

fileTree->outPut();

delete fileTree;

}

infile.close();

return 0;

}

4、测试方法

4.1测试目的

为了测试程序的正确性,需要分别测试它在正常情况和异常情况下的表现情况。

正常情况下的输入数据要求是:目录的初始大小一般设为1,目录名中不能包含‘(’,‘)’,‘[’,‘]’和‘*’这些字符,加入多余的空格不影响最后的输出结果;同一父目录下的兄弟节点用一对圆括号括起来;同一层上的不同父节点下的子节点均列在同一行中,但按照父节点的不同永圆括号加以界定。

14

4.2测试输入

*/usr 1

(*mark 1 *alex 1)

(hw.c 3 *course 1) (hw.c 5)

(aa.txt 12)

*/usr 1

()

*/usr000009 1

(*mark 1 *alex 1 *bill 1)

(*book 1 *course 1 junk.c 6) (junk.c 8) (*work 1 *course 1)

(ch1.r 3 ch2.r 2 ch3.r 4) (*cop3530 1) () (*cop3212 1)

(*fall96 1 *spr97 1 *sum97 1) (*fall96 1 *fall97 1)

(syl.r 1) (syl.r 5) (syl.r 2) (grades 3 prog1.r 4 prog2.r 1) (prog2.r 2 prog1.r 7 grades 9)

4.3 正确输出

The result is as follows:

|_*/usr[24]

|_*mark[17]

| |_hw.c[3]

| |_*course[13]

| |_aa.txt[12]

|_*alex[6]

|_hw.c[5]

|_*/usr[1]

|_*/usr000009[72]

|_*mark[30]

| |_*book[10]

| | |_ch1.r[3]

| | |_ch2.r[2]

| | |_ch3.r[4]

| |_*course[13]

15

| | |_*cop3530[12]

| | |_*fall96[2]

| | | |_syl.r[1]

| | |_*spr97[6]

| | | |_syl.r[5]

| | |_*sum97[3]

| | |_syl.r[2]

| |_junk.c[6]

|_*alex[9]

| |_junk.c[8]

|_*bill[32]

|_*work[1]

|_*course[30]

|_*cop3212[29]

|_*fall96[9]

| |_grades[3]

| |_prog1.r[4]

| |_prog2.r[1]

|_*fall97[19]

|_prog2.r[2]

|_prog1.r[7]

|_grades[9]

保存此文件,命名为“Tree”,在此文件夹中新建一个名为“input”的文本文件,在此文件中键入“测试输入”的代码,经过运行可以在“Tree”文件夹中找到一个名为“output”的文本文件,详细结果如下图3-2所示。

16

图3-2

在output文件中即可显示程序的输出结果。

4.4 实际输出

见图3-3

17

图3-3 18

数据结构二叉排序树的实现(用顺序和二叉链表作存储结构)课程设计

一、设计题目 1、题目:二叉排序树的实现 (用顺序和二叉链表作存储结构 ) 2、要求(功能): 1) 以回车('\n')为输入结束标志,输入数列L,生成一棵二叉排序树T; 2) 对二叉排序树T作中序遍历,输出结果; 3) 输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”; 二、需求分析 建立排序二叉树,主要是建立节点来存储输入的数据,需要建立函数来创造排序二叉树。 该题目包括三方面的容:一个是二叉排序树的建立,而是二叉树的中序遍历,三是二叉树元素的查找并删除。 三、数据结构设计 在写算法之前,应对数据结构进行设计。本体主要会用到指针变量,插入节点函数和建立二叉树,以及中序遍历函数,还有一些输入输出语句。 四、算法设计 算法设计思想

二插链表作存储结构:建立二插排序树采用边查找边插入的方式。查找函数采用递归的方式进行查找。如果查找成功则不应再插入原树,否则返回当前结点的上一个结点。然后利用插入函数将该元素插入原树。 对二叉树进行中序遍历采用递归函数的方式。在根结点不为空的情况下,先访问左子树,再访问根结点,最后访问右子树。 删除结点函数,采用边查找边删除的方式。如果没有查找到,则不对树做任何的修改;如果查找到结点,则分四种情况分别进行讨论:1、该结点左右子树均为空;2、该结点仅左子树为空;3、该结点仅右子树为空;4、该结点左右子树均不为空。 在进行算法设计时,应将题目分为五个函数模块: 1、中序遍历,符合升序输出 void inorder(node *&root) { if(root!=NULL) { inorder(root->left); cout<data<<' '; inorder(root->right); } }

二叉排序树的基本操作的实现

二叉排序树的基本操作的实现

————————————————————————————————作者: ————————————————————————————————日期:

二叉排序树的基本操作的实现

一设计要求 1.问题描述 从磁盘读入一组数据,建立二叉排序树并对其进行查找、、遍历、插入、删除等基本操作。 2.需求分析 建立二叉排序树并对其进行查找,包括成功和不成功两种情况。 二概要设计 为了实现需求分析中的功能,可以从以下3方面着手设计。 1.主界面设计 为了方便对二叉排序树的基本操作,设计一个包含多个菜单选项的主控制子程序以实现二叉排序树的各项功能。本系统的主控制菜单运行界面如图1所示。 图1二叉排序树的基本操作的主菜单 2.存储结构的设计 本程序主要采二叉树结构类型来表示二叉排序树。其中二叉树节点由1个表示关键字的分量组成,还有指向该左孩子和右孩子的指针。 3.系统功能设计 本程序设置了5个子功能菜单,其设计如下。 1)建立二叉排序树。根据系统提示,输入节点的关键字,并以0作为结束的标识符。 该功能由Bstree Create()函数实现。 2)插入二叉排序新的节点信息。每次只能够插入一个节点信息,如果该节点已 经存在,则不插入。该功能由Bstree Insert(y)函数实现。 3)查询二叉排序树的信息。每次进行查询,成功则显示“查询到该节点”,不成功 则“显示查询不到该节点“该功能由Bstree Search()函数实现。 4)删除二叉排序树的节点信息。可以对二叉排序树中不需要的节点进行删除, 删除的方式是输入关键字,查询到该节点后删除。该功能由BstreeDelete() 函数实现。 5)遍历二叉排序树。遍历二叉排序树可以显示该二叉排序树的全部节点信息。 该功能由void Traverse()实现。 三模块设计 1.模块设计 本程序包含两个模块:主程序模块和二叉排序树操作模块。其调用关系如图2

树的遍历:文件目录结构的显示

数据结构课程设计报告 树的遍历:文件目录结构的显示 专业 计算机科学与技术 学生姓名 **** 班级 计算机*** 学号 ***** 指导教师 徐燕萍 完成日期 2014年7月4日

目录 1、设计内容 (2) 2、设计分析 (3) 2.1建立树形链表结构的函数PARSE() (3) 2.2目录大小重新计算函数RE S IZE() (4) 2.3输出树形结构的函数OUT P UT() (5) 3、设计实践 (5) 4、测试方法 (14) 4.1测试目的 (14) 4.2测试输入 (15) 4.3正确输出 (15) 4.4实际输出 (17) 5 程序运行效果 (19) 5.1测试结果分析 (19) 5.2探讨与改进 (19) 6 设计心得 (20) 1

树的遍历:文件目录结构的显示 1、设计内容 给出Unix下目录和文件信息,要求编程实现将其排列成一定缩进的树。具体要求如下。输入要求: 输入数据包含几个测试方案。每一个案例由几行组成,每一行都代表了目录树的层次结构。第一行代表目录的根节点。若是目录节点,那么它的孩子节点将在第二行中被列出,同时用一对圆括号“()”界定。同样,如果这些孩子节点钟某一个也是目录的话,那么这个目录所包含的内容将在随后的一行中列出,有一对圆括号将首位界定。目录的输入格式为:*name size,文件的输入格式为:name size,其中*代表当前节点的目录,name代表文件或目录的名称,由一串长度不大于10的字符组成,并且name字符串中不能包含有‘(’,‘)’,‘[’,‘]’,‘*’。size是该文件/目录的大小,为大于0的整数。每一个案例中最多只能包含10层,每一层最多有10个文件/目录。 输出要求: 对每一个测试案例,输出时要求:第d层的文件/目录名前面需要插入8*d个空格,兄弟节点之间要在同一列上。不要使用Tab(制表符)来统一输出的缩进。每一个目录的大小(size)是它包含的所有子目录和文件大小以及它自身大小的总和。 输入例子: */usr1 (*mark 1 *alex 1) (hw.c3 *course 1)(hw.c 5) (aa.txt 12) */usr 1 () 表示含有两个不同的根目录,目录名都是/usr,第一个根目录/usr 下包含mark和alex两个子目录,mark目录下包含大小为3的文件hw.c和子目录course,alex目录下有一个大小为5的文件hw.c,子目录course下包含文件aa.txt,其大小为12;第二个根目录/usr下为空。 2

数据结构课程设计报告二叉排序树的实现

课程设计 课程名称数据结构课程设计 题目名称二叉排序树的实现 学院应用数学学院 专业班级 学号 学生 指导教师 2013 年 12 月 26 日

1.设计任务 1)实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上 用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信 息(至少包括学号、、成绩3项),对比查找效率,并说明 为什么二叉排序树效率高(或者低)。 2. 函数模块: 2.1.主函数main模块功能 1.通过bstree CreatTree()操作建立二叉排序树。 2.在二叉排序树t过操作bstree InsertBST(bstree t,int key,nametype name,double grade)插入一个节点。 3. 从二叉排序树t过操作void Delete(bstree &p)删除任意节点。 4. 在二叉排序树t过操作bstnode *SearchBST(bstree t,keytype key)查 找节点。 5. 在二叉排序树t过操作p=SearchBST(t,key)查询,并修改节点信息 6. 非递归遍历二叉排序树。 7. 定义函数void compare()对数组和二叉排序树的查找效率进行比较比 较。 2.2创建二叉排序树CreatTree模块 从键盘中输入关键字及记录,并同时调用插入函数并不断进行插入。最后,返回根节点T。 2.3删除模块: 二叉排序树上删除一个阶段相当于删去有序系列中的一个记录,只要在删除某个节点之后依旧保持二叉排序树的性质即可。假设二叉排序树上删除节点为*p(指向节点的指针为p),其双亲节点为*f(节点指针为f)。若*p节点为叶子节点,则即左右均为空树,由于删去叶子节点不破坏整棵树的结构,则只需修改其双亲节点的指针即可;若*p节点只有左子树或只有右子树,此时只要令左子树或右子树直接成为其双亲节点*f的左子树即可;若*p节点的左子树和右子树均不为空,其一可以令*p的左子树为*f的左子树,而*p的右子树为*s的右子树,其二可以令*p的直接前驱(或直接后继)替代*p,然后再从二叉排序树中删去它的直接前驱(或直接后继)。在二叉排序树中删除一个节点的算法为 void DeleteData(bstree &t,keytype key) 若二叉排序树t中存在关键字等于key的数据元素,则删除该数据元素节点,并返回TRUE,否则返回FALSE。 2.4插入模块 二叉排序树是一种动态树表,其特点是树的结构通常不是一次生成的,而是在查找的过程中,当树中不存在关键字等于给定值得节点时在进行插入。

数据结构二叉排序树实验报告

实验报告 课程名:数据结构(C语言版)实验名:二叉排序树 : 班级: 学号: 撰写时间:2014.12.18

一实验目的与要求 1.掌握二叉排序树上进行插入和删除的操作 2.利用C 语言实现该操作 二实验内容 ?对于一个线形表, 利用不断插入的方法, 建立起一株二叉排序树 ?从该二叉排序树中删除一个叶子节点, 一个只有一个子树的非叶子节,一个有两个子树的非叶子节点。 三实验结果与分析 #include #include //二叉查找树结点描述 typedef int KeyType; typedef struct Node { KeyType key; //关键字 struct Node * left; //左孩子指针 struct Node * right; //右孩子指针 struct Node * parent; //指向父节点指针 }Node,*PNode;

//往二叉查找树中插入结点 //插入的话,可能要改变根结点的地址,所以传的是二级指针void inseart(PNode * root,KeyType key) { //初始化插入结点 PNode p=(PNode)malloc(sizeof(Node)); p->key=key; p->left=p->right=p->parent=NULL; //空树时,直接作为根结点 if((*root)==NULL){ *root=p; return; } //插入到当前结点(*root)的左孩子 if((*root)->left == NULL && (*root)->key > key){ p->parent=(*root); (*root)->left=p; return; } //插入到当前结点(*root)的右孩子 if((*root)->right == NULL && (*root)->key < key){ p->parent=(*root);

二叉排序树运算-数据结构与算法课程设计报告_l

合肥学院 计算机科学与技术系 课程设计报告 2009 ~2010 学年第二学期 课程 数据结构与算法 课程设计 名称 二叉排序树运算学生姓名顾成方 学号0704011033 专业班级08计科(2) 指导教师王昆仑张贯虹 2010 年 5 月

题目:(二叉排序树运算问题)设计程序完成如下要求:对一组数据构造二叉排序树,并在二叉排序树中实现多种方式的查找。基本任务:⑴选择合适的储存结构构造二叉排序树;⑵对二叉排序树T作中序遍历,输出结果;⑶在二叉排序树中实现多种方式的查找,并给出二叉排序树中插入和删除的操作。 ⑷尽量给出“顺序和链式”两种不同结构下的操作,并比较。 一、问题分析和任务定义 本次程序需要完成如下要求:首先输入任一组数据,使之构造成二叉排序树,并对其作中序遍历,然后输出遍历后的数据序列;其次,该二叉排序树能实现对数据(即二叉排序树的结点)的查找、插入和删除等基本操作。 实现本程序需要解决以下几个问题: 1、如何构造二叉排序树。 2、如何通过中序遍历输出二叉排序树。 3、如何实现多种查找。 4、如何实现插入删除等操作。 二叉排序树的定义:

⑴其左子树非空,则左子树上所有结点的值均小于根结点的值。 ⑵若其右子树非空,则右子树上所有结点的值大于根结点的值。 ⑶其左右子树也分别为二叉排序树。 本问题的关键在于对于二叉排序树的构造。根据上述二叉排序树二叉排序树的生成需要通过插入算法来实现:输入(插入)的第一个数据即为根结点;继续插入,当插入的新结点的关键值小于根结点的值时就作为左孩子,当插入的新结点的关键值大于根结点的值时就作为右孩子;在左右子树中插入方法与整个二叉排序树相同。当二叉排序树建立完成后,要插入新的数据时,要先判断已建立的二叉排序树序列中是否已有当前插入数据。因此,插入算法还要包括对数据的查找判断过程。 本问题的难点在于二叉排序树的删除算法的实现。删除前,首先要进行查找,判断给出的结点是否已存在于二叉排序树之中;在删除时,为了保证删除结点后的二叉树仍为二叉排序树,要考虑各种情况,选择正确

数据库的存储结构(文件、记录的组织和索引技术)

数据库的存储结构(文件、记录的组织和索引技术) by 沈燕然0124141 利用课余时间自学了第6章《数据库存储结构》,对于数据 库不同层次的存储结构,文件记录组织和索引技术有了一定的 了解,在这篇札记中将会结合一些具体应用中涉及到的数据存 储和索引知识,以及通过与过去学习过的一些数据结构比较来 记录自己学习的心得体会。这些实例涉及不同的数据库系统, 如Oracle, DB2和Mysql等等,它们之间会有一些差异。不过 本文旨在探讨数据存储方面的问题,因而兼容并包地将其一并收入,凡是可能需要说明之处都会加上相应的注解。:) 1、数据库(DBS)由什么组成?——逻辑、物理和性能特征 1、什么是数据库系统(DBS)——DBS用文件系统实现 在关系模型中,我们把DBS看成关系的汇集。DBS存在的目的就是为了使用户能够简单、方便、容易地存取数据库中的数据。因此在用户的眼中,数据库也就是以某种方式相关的表的集合。用户并不需要去关心表之间关系,更不需要了解这些表是怎样存储的。但是我们现在从DBA(数据库管理员)的角度来看,情况就比那稍稍复杂一点。 实际的数据库包含许多下面列出的物理和逻辑对象: ?表、视图、索引和模式(确定数据如何组织) ?锁、触发器、存储过程和包(引用数据库的物理实现) ?缓冲池、日志文件和表空间(仅处理如何管理数据库性能) 2、什么是表空间?——表空间相当于文件系统中的文件夹。 表空间被用作数据库和包含实际表数据的容器对象之间的一层,表空间可以包含多个不同的表。用户处理的实际数据位于表中,他们并不知道数据的物理表示,这种情况有时被称为数据的物理无关性。

上图描述了一个ORACLE数据库大致的表空间组织,USER中存放主要的数据表,TEMP存放临时数据表,INDX存放索引,TOOLS存放回退段(RBS). 表空间在DB2数据库系统中是比较典型的说法,在Mysql等系统中也直接使用文件系统中文件夹的概念。新建一个表的时候可以指定它所在的表空间,至于用文件具体存储数据时如何存储这可能就是各个数据库系统的商业机密了,至少DB2是这样。另外值得关注的一点是不同于oracles对表空间的严格要求,Mysql的数据库形式相对比较简单,以文件夹的形式存放在安装目录的/data/下面,该数据库的每一个表对应两个文件,一个存放表中数据,另一个存放元数据信息,也就是建表时指明的列属性等等信息。 3、文件中的记录在物理上如何实现?——文件组织形式 在外存中,DB以文件形式组织,而文件由记录组成。文件结构由OS的文件系统提供和管理。文件组织有两种方式——定长记录格式和变长记录格式。 那种格式更好? 定长记录格式——优点是插入操作较简单。 缺点是对记录长度有硬性要求,而且有的记录可能横跨多个快,降低读写效率。 变长记录格式——优点是记录长度自由方便 缺点是记录长度差异导致删除后产生大量“碎片”,记录很难伸长,尤其“被拴记录”移动代价相当大。 中庸之道——预留空间和指针方式 记录长度大多相近——采用预留空间方法,取最大记录长为统一标准,在短记录多于空间处填特定空值或记录尾标志符。 记录长度相差很大——采用指针形式(每纪录后的指针字段把相同属性值记录链接起来)。文件中使用两种块——固定块(存放每条链中第一条记录)和溢出块(存放其 余纪录)。 3、记录在文件中怎样组织?

多级文件目录的文件管理系统文件.doc

山东理工大学计算机学院课程设计 (操作系统) 班级 姓名 学号 指导教师 二○一一年六月二十四日

课程设计任务书及成绩评定 课题名称基于多级文件目录的文件管理系统设计 Ⅰ、题目的目的和要求: 巩固和加深对操作系统(OS)原理的理解,初步掌握操作系统组成模块和应用接口的使用方法,提高进行工程设计和系统分析的能力;通过选做上 面的课题,实现OS最基本模块的管理功能,重点放在数据结构设计、文档规范化和程序设计风格。 Ⅱ、设计进度及完成情况 日期内容 6.13-6.15 选取参考书,查阅有关文献资料,完成课程设计说明 书内容 1 部分。完成课程设计说明书内容2-4 部分 6.16~6.20 创建相关数据结构, 录入源程序 6.21~6.22 调试程序并记录调试中的问题,完成课程设计说明书第5 部分。 6.23 系统测试,演示设计成果,考核成绩。 整理课程设计说明书,上午11 时,由学习委员交课 6.24 程设计说明书(计算机科学系9#213 或直接交给指导 教师) Ⅲ、主要参考文献及资料 [1] 汤子赢等. 计算机操作系统(第二版). 西安电子科技大学出版社,2006.8

[2] 冯耀霖等. 操作系统,西安电子科技大学出版社.1992 [3] 张尧学等. 计算机操作系统教程( 第2 版). 清华大学出版社,2001.4 [4] 谭耀铭. 操作系统. 中国人民大学出版社,2003.4 [5] 刘坤起. 操作系统学习辅导与习题详解[M]. 北京: 电子工业出版社, 2003:58-67 [6] 孙钟秀等编著,操作系统教程[M],高等教育出版社,2003:46-78 Ⅳ、成绩评定: 设计成绩:(教师填写) 指导老师:(签字) 二○一一年六月二十四日

Linux C :遍历输出指定目录下的所有文件

Linux C :遍历输出指定目录下的所有文件 在Linux下opendir()、readdir()和closedir()这三个函数主要用来遍历目录。在使用这三个函数前必须先包括以下两个头文件: #include #include opendir函数的原型为: DIR *opendir(const char *name); 它返回一个DIR*类型,这就是一个句柄啦,你不用管它的内部结构是什么样的,只要知道这个句柄就是等一下要传给readdir()函数的参数就行了。 readdir函数的原型为: struct dirent *readdir(DIR *dir); 看它的参数就知道该参数是opendir函数返回的句柄,而该函数的返回值是struct dirent* 类型,这里我们必须了解一下这个结构体: struct dirent { ino_t d_ino; /* inode number */ off_t d_off; /* offset to the next dirent */ unsigned short d_reclen; /* length of this record */ unsigned char d_type; /* type of file */ char d_name[256]; /* filename */ }; 这个结构体的d_name存放的就是文件的名字,这里的文件包括普通文件,目录文件等等,在linux的思想中,所有的东西都是文件。 closedir函数的原型为: int closedir(DIR *dir); 这个函数就不用多说了,一般有开(open),就有关(close),这样的结构经常可出看到,如fopen,fclose等等。 三个函数介绍完了,直接来一个例子吧: SearchDir.c#include #include #include #include #include char filename[256][256]; int len = 0; int trave_dir(char* path, int depth) { DIR *d; //声明一个句柄 struct dirent *file; //readdir函数的返回值就存放在这个结构体中 struct stat sb;

最新数据结构练习3答案优秀文档

数据结构练习(三)参考 一、选择题 1.顺序查找法适合于存储结构为的线性表 A)哈希存储 B)顺序存储或链式存储 C)压缩存储 D)索引存储 2.一个长度为100的已排好序的表,用二分查找法进行查找,若查找不成功, 至少比较________次。 A)9 B)8 C)7 D)6 3.采用顺序查找方法查找长度为n的线性表时,平均比较次数为。A)n B)n/2 C)(n+1)/2 D)(n-1)/2 4.对线性表进行折半查找时,要求线性表必须。 A)以顺序方式存储B)以顺序方式存储,且结点按关键字有序排列 C)以链表方式存储D)以链表方式存储,且结点按关键字有序排列 5.采用二分查找法查找长度为n的线性表时,每个元素的平均查找长度为。 A)O(n2)B)O(nlog2n)C)O(n)D)O(log2n) 6.有一个长度为12的有序表R[0…11],按折半查找法对该表进行查找,在表内各元素等概率查找情况下查找成功所需的平均比较次数为。 A)35/12 B)37/12 C)39/12 D)43/12 7.有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,99},当采用折半查找法查找关键字为82的元素时,次比较后查找成功。A)1 B.2 C)4 D)8 8.当采用分块查找时,数据的组织方式为。 A)数据分成若干块,每块内存数据有序 B)数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块 C)数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块 D)数据分成若干块,每块(出最后一块外)中的数据个数需相同 9.采用分块查找时,若线性表中共有625个元素,查找每个元素的概率相同,

文档结构图和目录自动生成方法

电子版文档点击“视图”→“文档结构图”编成目录,点击可快速链接,且目录随时能够看到;纸质版文档点击“插入”→“引用”→“索引和目录”。二者前提都要点击“视图”→“大纲”,编辑标题级别。具体操作如下: 利用大纲级别自动生成目录 如果要插入目录,请单击“插入”菜单,指向“引用”→“索引和目录”,出现“索引和目录”的画面,点击“目录”标签,倘若直接按下“确定”按钮,则会以黑体字提示“错误!未找到目录项”。那么何谓“目录项”呢?目录项即文档中用来显示成为目录内容的一段或一行文本。因此,要想自动显示目录,必先定义目录项。 目录项的定义很简单,点击“视图”→“大纲”切换至大纲模式,如下图所示,大纲模式下文档各段落的级别显示得清楚,选定文章标题,将之定义为“1级”,接着依次选定需要设置为目录项的文字,将之逐一定义为“2级”。当然,若有必要,可继续定义“3级”目录项。 定义完毕,点击“视图”→“页面”回至页面模式,将光标插入文档中欲创建目录处,再次执行“插入”→“引用”→“索引和目录”,出现“索引和目录”画面,点击“目录”标签,则显示如图: 一共只定义了二个级别的目录项,因此将上图“显示级别”中的数字改为“2”。“显示页码”与“页码右对齐”这二项推荐选择,前者的作用是自动显示目录项所在的页面,后者的作用是为了显示美观。“制表符前导符”即目录项与右对齐的页码之间区域的显示符号,可下拉选择;此外,有多种目录显示格式可供选择,下拉“格式”就可以看到了。 最后点“确定”,如图所示,目录就这样生成了,包括页码都自动显示出来了。按住Ctrl 键,点击某目录项,当前页面自动跳转至该目录项所在的页码,很方便吧?

《二叉排序树的操作》课程设计报告

内蒙古科技大学 本科生课程设计论文《数据结构与算法》 题目:二叉排序树的操作 学生姓名:贺英杰 学号:1367159108 专业:软件工程 班级:13-1班 指导教师:周李涌 日期:2015年1月6日

内蒙古科技大学课程设计任务书课程名称数据结构与算法课程设计 设计题目二叉排序树的操作 指导教师周李涌时间2015.1.5——2015.1.9 一、教学要求 1. 掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力 2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能 3. 提高综合运用所学的理论知识和方法独立分析和解决问题的能力 4. 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风 二、设计资料及参数 每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。 二叉排序树的操作 以二叉链表表示二叉排序树,在此基础上实现二叉排序树的操作。 要求设计类(或类模板)来描述二叉排序树,包含必要的构造函数和析构函数,以及其他能够完成如下功能的成员函数: 创建二叉排序树 输出二叉排序树 在二叉排序树中查找给定值 在二叉排序树中插入新结点 在二叉排序树中删除给定值 并设计主函数测试该类(或类模板)。 三、设计要求及成果 1. 分析课程设计题目的要求 2. 写出详细设计说明 3. 编写程序代码,调试程序使其能正确运行 4. 设计完成的软件要便于操作和使用 5. 设计完成后提交课程设计报告 四、进度安排 资料查阅与讨论(1天) 系统分析(2天) 系统的开发与测试(5天) 编写课程设计说明书和验收(2天) 五、评分标准 1. 根据平时上机考勤、表现和进度,教师将每天点名和检查 2. 根据课程设计完成情况,必须有可运行的软件。 3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。 4. 根据答辩的情况,应能够以清晰的思路和准确、简练的语言叙述自己的设计和回答教师的提问 六、建议参考资料 1.《数据结构(C语言版)》严蔚敏、吴伟民主编清华大学出版社2004.11 2.《数据结构课程设计案例精编(用C/C++描述)》,李建学等编著,清华大学出版社 2007.2 3.《数据结构:用面向对象方法与C++语言描述》,殷人昆主编,清华大学出版社 2007.6

C#遍历目录下的所有文件夹

//这个是网上转的上一个也是仿照这个改的同样是win32控制台程序学习! using System; using System.Collections.Generic; using System.Text; using System.IO; namespace TestFileInfo { class Program { static void Main(string[] args) { string pathNames=null; do { Console.Write("请输入目录路径名(输入x退出程序):"); pathNames = Console.ReadLine(); if ((pathNames == "X") || (pathNames == "x")) break; DirectoryInfo dirPath = new DirectoryInfo(pathNames); CDirectoryInfo dirObject = new CDirectoryInfo(); Console.Write(dirObject.GetDirectoryInfos(dirPath)); Console.WriteLine("______________________________________________ ________/n"); //dirObject.pathNameProp = null; //Console.Write(dirObject.GetDirectoryInfos(pathNames)); //Console.WriteLine("_____________________________________________ ________"); } while (true);//((pathName == "X") || (pathName == "x")); Console.Write("/n程序已终止,按任意键退出程序!"); Console.ReadKey(); } }

北邮数据结构实验—二叉排序树

数据结构 实 验 报 告 实验名称:______二叉排序树___________ 学生姓名:____________________ 班级:_______________ 班内序号:_______________________ 学号:________________ 日期:________________

1.实验要求 根据二叉排序树的抽象数据类型的定义,使用二叉链表实现一个二叉排序树。 二叉排序树的基本功能: 1.二叉排序树的建立 2.二叉排序树的查找 3.二叉排序树的插入 4.二叉排序树的删除 5.二叉排序树的销毁 6.其他:自定义操作编写 测试main()函数测试二叉排序树的正确性 2. 程序分析 2.1 存储结构 二叉链表 2.2 程序流程(或程序结构、或类关系图等表明程序构成的内容,一般为流程图等) 2.2.1.

2.2.2.伪代码 1.从文件读取待建树元素 2.建树,若待插入元素比根节点小,向左子树前进并重复比较左子树根节点,若待插入元素比根节点大,向右子树前进并重复比较右子树根节点,直至找到空节点则插入该元素,不断插入直至不剩下元素。 3.用户选择操作。 4.若用户选择查找,则现由用户输入待查找数值。从根节点开始比较,若较小则移至左子树,若较大则移至右子树,直至关键码相等,则输出节点情况。 5.若用户选择插入,则现由用户输入待插入数值。从根节点开始比较,若较小则移至左子树,若较大则移至右子树,直至到空节点,则插入该元素。 6.若用户选择删除,则现由用户输入待删除数值。从根节点开始比较,若较小则移至左子树,若较大则移至右子树,直至关键码相等; 1).若该节点为叶子节点,则直接删除; 2).若该节点无左子树,则其双亲节点直接与其右子树根节点连接,再删除该节点; 3).若该节点有左子树,则其左子树的最右节点数值直接覆盖该节点数值,再删除最后节点。 7.若用户选择销毁,则不断执行删除操作直至不剩余节点。 8.若用户选择退出,则程序结束。 2.3 关键算法分析 关键代码即删除操作,代码如下: void Delete(BiNode* &R) { BiNode* q=new BiNode; BiNode *s=new BiNode; if(R->lch==NULL){ q=R; R=R->rch; delete q;} else if(R->rch==NULL){ q=R; R=R->lch; delete q; } else{ q=R; s=R->lch; while(s->rch!=NULL) { q=s; s=s->rch;} R->data=s->data; if(q!=R)

B -树索引的建立

数据库系统实现 实验报告 实验名称: B -树索引的建立 一、实验内容 使用B-树对数据库进行索引。按照学生ID建立起B树索引。实验需要建立两个文本文件:数据文件datafile.txt和命令文件command.txt。数据文件包含了所有需要建立检索的学生信息,文本中的每一行包含一个学生的信息。每一行将由6个空格分隔的字符段组成:ID (9位),姓(最多15个字符),名(最多

15个字符),年级(1位),专业(最多4个字符),以及邮箱地址(最多20个字符)。 二、实验分析: 三、步骤分析及流程图 步骤分析:一个具有10,000,000个记录的文本文件共计10,000,000*100B=1000MB,而内存只有50MB,50MB/4KB=50*1024 KB/4KB=12800块,每块可以存放4*1024B/100B=40个记录,每块剩余96KB,内存一共可以存放12800*40=512000个记录,一共有10,000,000个记录。 所以要进行10,000,000/512000=19.53次,即20次排序,每次排序的记录数为10,000,000/20=500,000个记录。 因此此次实验需要将文本文件分成20个子文件。分别对子文件分别进行内部排序。最后对20个排好序的子文件进行归并排序,完成排序。 故将其分为三个阶段 1.生成一个具有10,000,000个记录的文本文件data.txt,其中每个记 录由100个字节组成,其中只有一个整数类型属性A,剩余字节用0 填充。程序生成一个4个字节之内随机整数作为每条记录的属性, 剩余字节用0填充。记录写入data.txt文件中。 2.根据实验分析,将data.txt文件分为20个子文件,并且按照文件 中每个记录的属性对各个子文件进行内部排序,最终形成20个有序 的子文件data1.txt,data2,txt,…data20.txt。 3.对20个有序的子文件进行归并排序,最终形成一个有序的结果文件 result.txt。 流程图: 阶段一流程图见图1.1

通达信目录文件结构及说明

通达信目录文件结构及说明 vipdoc:下载或缓存的历史数据目录 diary:投资日志目录 RemoteSH:缓存的上海F10 RemoteSZ:缓存的深圳F10 Ycinfo:缓存的公告消息 安装目录下的SZ.*,SH.*是缓存的盘中数据文件 T0002:个人信息目录,内有公式和自选股,个人设置等信息 T0002\blocknew:该文件夹保存自定义板块的信息 T0002\mark.dat:该文件保存标记文字的信息 T0002\PriCS.dat 、 PriGS.dat 这两个文件是自定义指标模板的信息Advhq.dat 星空图相关个性化数据 Block.cfg 板块设置文件 cbset.dat 筹码分析个性化数据 colwarn3.dat 行情栏目和预警个性化数据 colwarnTj.dat 条件预警个性化数据 CoolInfo.Txt 系统备忘录 Line.dat 画线工具数据 MyFavZX.dat 资讯收藏夹数据 newmodem.ini 交易客户端个性化数据 padinfo.dat 定制版面个性化数据 PriCS.dat,PriGS.dat,PriText.dat 公式相关数据 recentsearch.dat 最近资讯搜索数据 Scheme.dat 配色方案 tmptdx.css 临时网页CSS文件 user.ini 全局个性化数据 userfx.dat K线图个性化数据 [blocknew] 板块目录 [cache] 系统数据高速缓存 [zst_cache] 分时图数据高速缓存 [coolinfo] 系统备忘录目录 [Invest] 个人理财数据目录 SUPERSTK下的文件:SYS.DTA 存放系统提供的公式; USERDATA下的文件:AUTOBLK.CFG:自动板块设定;SELF.DTA 存放用户自编的公式; BLOCK文件夹下的文件:*.IBK 板块指数定义;*.BLK 板块定义;*.EBK 条件选股结果;

用vba遍历文件夹和子文件夹中的所有文件

在VBA遍历文件夹和子文件夹中所有文件,常用两种方法,一种是使用VBA的filesercth 对象,另外一种是使用FileSystemObject(windows文件管理工具)和递归方法。兰色对代码进行了注解,希望对大家有所帮助 第二种方法:引用FileSystemObject对象 注意:要使用FileSystemObject对象,需要首先引用一下,具体方法,VBE--工具--引用--找到miscrosoft scription runtime项目并选中 代码及注释: Dim ArrFiles(1 To 10000) '创建一个数组空间,用来存放文件名称 Dim cntFiles% '文件个数 Public Sub ListAllFiles() Dim strPath$ '声明文件路径 Dim i% 'Set fso = CreateObject("Scripting.FileSystemObject") Dim fso As New FileSystemObject, fd As Folder '创建一个FileSystemObject对象和一个文件夹对象 strPath = ThisWorkbook.Path & "\" '"设置要遍历的文件夹目录 cntFiles = 0 Set fd = fso.GetFolder(strPath) '设置fd文件夹对象 SearchFiles fd '调用子程序查搜索文件 Sheets(1).Range("A1").Resize(cntFiles) = Application.Transpose(ArrFiles) '把数组内的路径和文件名放在单元格中 End Sub Sub SearchFiles(ByVal fd As Folder) Dim fl As File Dim sfd As Folder For Each fl In fd.Files '通过循环把文件逐个放在数组内 cntFiles = cntFiles + 1 ArrFiles(cntFiles) = fl.Path Next fl If fd.SubFolders.Count = 0 Then Exit Sub 'SubFolders返回由指定文件夹中所有子文件夹(包括隐藏文件夹和系统文件夹)组成的Folders 集合 For Each sfd In fd.SubFolders '在Folders 集合进行循环查找 SearchFiles sfd '使用递归方法查找下一个文件夹 Next End Sub

如何参考资料在WORD文档中插入目录或建立文档结构

温新荣方法: 打开word文档-样式和格式窗口-选择需要做目录的文字-在样式中选“标题1,2,3…”-再右击所选文字-选择字体-在选择字体状态下用“格式刷”刷选同级标题-然后,光标置首,选择一级标题文字-插入-引用――索引和目录-目录-确定-然后,点“视图”-文章结构。 如果要插入目录,请单击“插入”菜单,指向“引用”→“索引和目录”,出现“索引和目录”的画面,点击“目录”标签,倘若直接按下“确定”按钮,则会以黑体字提示“错误!未找到目录项”。如此,就按下文方法操作! 如何在WORD文档中插入目录? 2009-3-10 13:32:17 在谷歌搜索如何在WORD文档中插入目录? 系统推荐答案2009-3-10 13:32:37 如果要插入目录,请单击“插入”菜单,指向“引用”→“索引和目录”,出现“索引和目录”的画面,点击“目录”标签,倘若直接按下“确定”按钮,则会以黑体字提示“错误!未找到目录项”。 目录项即文档中用来显示成为目录内容的一段或一行文本。因此,要想自动显示目录,必先定义目录项。 目录项的定义很简单,点击“视图”→“大纲”切换至大纲模式,如下图所示,大纲模式下文档各段落的级别显示得清楚,选定文章标题,将之定义为“1级”,接着依次选定需要设置为目录项的文字,将之逐一定义为“2级”。当然,若有必要,可继续定义“3级”目录项。 定义完毕,点击“视图”→“页面”回至页面模式,将光标插入文档中欲创建目录处,再次执行“插入”→“引用”→“索引和目录”,出现“索引和目录”画面,点击“目录”标签 上面一共只定义了二个级别的目录项,因此将上图“显示级别”中的数字改为“2”。“显示页码”与“页码右对齐”这二项推荐选择,前者的作用是自动显示目录项所在的页面,后者的作用是为了显示美观。“制表符前导符”即目录项与右对齐的页码之间区域的显示符号,可下拉选择;此外,有多种目录显示格式可供选择,下拉“格式”就可以看到了。 最后点“确定”,如图所示,目录就这样生成了,包括页码都自动显示出来了。按住Ctrl 键,点击某目录项,当前页面自动跳转至该目录项所在的页码

二叉排序树与平衡二叉排序树基本操作的实现

编号:B04900083 学号:8 Array课程设计 教学院计算机学院 课程名称数据结构与算法 题目二叉排序树与平衡二叉排序树基本操 作的实现 专业计算机科学与技术 班级二班 姓名 同组人员 指导教师成俊 2015 年12 月27 日

课程设计任务书 2015 ~2016 学年第 1 学期 学生:专业班级:计科二 指导教师:成俊工作部门:计算机学院 一、课程设计题目:二叉排序树与平衡二叉排序树基本操作 二、课程设计容 用二叉链表作存储结构,编写程序实现二叉排序树上的基本操作:以回车('\n')为输入结束标志,输入数列L,生成二叉排序树T;对二叉排序树T作中序遍历;计算二叉排序树T的平均,输出结果;输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历;否则输出信息“无结点x”; 判断二叉排序树T是否为平衡二叉树;再用数列L,生成平衡二叉排序树BT:当插入新元素之后,发现当前的二叉排序树BT不是平衡二叉排序树,则立即将它转换成新的平衡二叉排序树BT;计算平衡的二叉排序树BT的平均查找长度,输出结果。 三、进度安排 1.分析问题,给出数学模型,选择数据结构. 2.设计算法,给出算法描述 3.给出源程序清单 4. 编辑、编译、调试源程序 5. 撰写课程设计报告 四、基本要求 编写AVL树判别程序,并判别一个二叉排序树是否为AVL树。二叉排序树用其先序遍历结果表示,如:5,2,1,3,7,8。 实现AVL树的ADT,包括其上的基本操作:结点的加入和删除;另外包括将一般二叉排序树转变为AVL树的操作。 实现提示主要考虑树的旋转操作。

目录 一、课程设计题目: 二叉排序树与平衡二叉排序树基本操作 (1) 二、课程设计容 (1) 三、进度安排 (1) 四、基本要求 (1) 一、概述 (3) 1.课程设计的目的 (3) 2.课程设计的要求 (3) 二、总体方案设计 (4) 三、详细设计 (6) 1.课程设计总体思想 (6) 2.模块划分 (7) 3.流程图 (8) 四、程序的调试与运行结果说明 (9) 五、课程设计总结 (14) 参考文献 (14)

c#遍历一个文件夹下的所有文件包括子文件夹

c#遍历一个文件夹下的所有文件包括子文件夹 using System; using System.IO; class ListAllFilesDemo { public static void Main() { Console.Write( "请输入要查询的目录: "); string dir = Console.ReadLine(); try { ListFiles(new DirectoryInfo(dir)); } catch(IOException e) { Console.WriteLine(e.Message); } } public static void ListFiles(FileSystemInfo info)

{ if (!info.Exists) return; else { DirectoryInfo dirInfo = info as DirectoryInfo; if (dirInfo != null) { foreach (var file in dirInfo.GetFileSystemInfos()) { FileInfo fileInfo = file as FileInfo; if (fileInfo != null) Console.WriteLine(fileInfo.FullName); else { listFiles(file as DirectoryInfo); } } }

} } } C#中遍历目录下的目录的文件(二) 1、遍历一个目录下的全部目录,要用到System.IO.DirectoryInfo 类的GetDirectories方法: DirectoryInfo dir = new DirectoryInfo(@"c:\"); foreach(DirectoryInfo dChild in dir.GetDirectories("*")) {//如果用GetDirectories("ab*"),那么全部以ab开头的目录会被显示 Response.Write(https://www.sodocs.net/doc/095941584.html, + "
");//打印目录名 Response.Write(dChild.FullName + "
");//打印路径和目录名} 2、遍历一个目录下的全部文件,要用到System.IO.DirectoryInfo 类的GetFiles方法: DirectoryInfo dir = new DirectoryInfo(@"c:\"); foreach(DirectoryInfo dChild in dir.GetFiles("*")) {//如果用GetFiles("*.txt"),那么全部txt文件会被显示 Response.Write(https://www.sodocs.net/doc/095941584.html, + "
");//打印文件名

相关主题