文件目录管理与显示
- 格式:doc
- 大小:121.00 KB
- 文档页数:16
项目5 文件与目录管理任务描述:任务一:启动计算机,利用root用户登录到系统,查看提示符;用pwd目录查看目前所在的目录;用ls目录列出当前目录下的文件和目录;列出此目录下包括隐藏文件在内的所有文件和目录并且长格式显示;长格形式列出当前目录下的所有文件,注意比较每个文件的长度和创建时间的不同;进入/home目录下,创建测试目录test;利用ls目录列出文件和目录,确认test目录创建成功;回到上一层工作目录,删除test目录;cd /后,进入root的主目录(分别用绝对路径和相对路径进入)。
任务二:查看/etc/passwd文件类型;利用touch命令,在/home目录创建一个新的空文件newfile;使用man cat 命令查看cat命令使用帮助;只看/etc/passwd的前5行内容;只看/etc/passwd的后5行内容;分别用cat、more、less、head、tail查看/etc/passwd文件,看看有什么区别?任务三:查看/root及其子目录下以install开头的文件;查找显示/etc/passwd文件中包含root的行;查找/home目录下的所有名为profile的文件;查找httpd.conf。
任务四:利用cp命令复制系统文件/etc/profile到/home目录下;在/home中复制文件profile 到一个新文件profile.bak,作为备份;将/boot目录中的所有文件及其子目录复制到/root中。
任务目标:●掌握文件操作相关命令●掌握目录操作相关命令任务重点:●文件和目录操作命令任务难点:●文件和目录操作命令知识准备:5.1.1 文件及目录概述1.文件系统的含义文件系统是一种存放在格式化的存储介质上的能够被操作系统管理的文件集合Linux 文件均为无结构的字符流形式。
文件名是文件的标识,它由字母、数字、下划线和圆点组成的字符串来构成。
Linux要求文件名的长度限制在255个字符以内.为了便于管理和识别,用户可以把扩展名作为文件名的一部分。
实验1 常用操作命令1、实验目的通过实验掌握Linux的目录操作,文件操作,文本文件显示等常用管理命令。
掌握管道与重定向操作。
2、实验内容(1)Linux的目录操作(2)文件操作(3)文本文件显示(4)管道与重定向3、实验步骤(一)文件与目录操作命令(1)用root账号登录到终端,使用pwd命令查看当前目录.(2)使用cd命令将当前目录切换到/目录下。
(3)使用ls命令查看Linux的目录结构,了解各个目录存放与系统相关的文件。
(4)使用cat、more、head .tail等命令显示介/etc/inittab文件内容。
(5)使用grep命令在/etc/inittab文件中查询“initdefault',字符串。
(6)使用find命令查找/目录下所有以main开头的文件,并显示这些文件的内容。
(7)用cp命令将/etc目录下的inittab文件和拷贝到/root目录下。
(8)使用sort或uniq命令对root目录下的inittab文件排序后输出其结果。
(9)统计inittab文件的字节数、行数、字数。
(10)用mkdir命令在/root目录下创建一个test目录。
(11)用cp命令将/etc目录及其下所有内容复制到test目录下。
(12)使用cd和ls查看/root/test/etc下的内容。
(13)将test目录改名为test2.(14)删除test2目录。
(二)目录操作命令(1)使用建立子目录命令(mkdir)在用户目录下创建如图所示的目录结构。
(2)删除子目录命令(rmdir)思考题1、利用sed命令在/etc/passwd中分别查找满足以下条件的行:(1) o字符重复任意次(2) o字符重复一次以上(3) o字符重复两次以上2、利用sed命令将input文件中的\OU字符串修改为(ou)3、利用sed命令打印input文件中除第3^'8行之外的所有行,在以下三种不同选项组合下运行该命令:(1)不带任何选项:(2)只带一n选项;(3)同时带一n和一p选项并分析以上三种不同选项组合的区别。
Linux操作系统报告单专业:计算机科学与技术学号:姓名:名称:文件和目录管理任课教师:班级:完成日期:成绩:一、实验名称及目的:实验名称:文件和目录管理实验目的:1、了解linux系统的文件和目录结构2、熟悉linux系统的文件和目录管理的方式和命令3、能够熟练的使用文件和目录管理命令二、实验内容及要求:1.查看操作系统的根目录下,有哪些目录2.文件操作(1)查看文件(可以是二进制的)内容 cat执行格式:cat filename 或more filename 或cat filename|more 例: cat file1 以连续显示方式,查看文件 file1 的内容 more file1或 cat file1|more 以分页方式查看文件的内容(2)删除文件rm执行格式: rm filename 例: rm file? rm f* (3)复制文件 cp执行格式:cp [r] source dest ination 例:cp file1 file2将 file1 复制成 file2cp file1 dir1 将file1复制到目录 dir1 cp /tmp/file1 将file1复制到当前目录cp /tmp/file1 file2 将file1复制到当前目录名为 file2 cp –r dir1 dir2 (recursive copy)复制整个目录(4)移动或更改文件、目录名称 mv执行格式: mv source destination 例:mv file1 file2 将文件 file1,更名为 file2mv file1 dir1 将文件 file1,移到目录 dir1 下 mv dir1 dir2(5)比较文件(可以是二进制的)或目录的内容 diff执行格式:diff [r] name1 name2 (name1、name2 同为目录)文件或例: diff file1 file2 比较 file1 与 file2 的不同处diff –r dir1 dir2 dir1 与 dir2 的不同处(6)文件中字符串的查找 grep专业:计算机科学与技术学号:姓名:执行格式:grep string file1例:grep abc file1 查找并列出串 abc 所在的整行文字 3、系统询问与权限口令(1)查看系统中的使用者执行格式: who (2)查看 username执行格式: who am I 查看自己的 username (3)改变自己的 username 的帐号与口令 su执行格式: su username例: su username 输入账号 Password 输入密码(4)文件属性的设置 chmod执行格式:chmod [R] mode name 其中:[-R]为递归处理,将指定目录下所有文件及子目录一并处理 mode 为 3-8 位数字,是文件/目录读、写、执行允许权的缩写(r:read,数字代号为"4", w:write,数字代号为"2", x:execute,数字代号为"1")mode: rwx rwx rwx user group other 缩写:(u)(g)(o)例:chmod 755 dir1 将将目录 dir1 设定成任何人皆有读取及执行的权利,但只有拥有者可作写修改。
Linux常⽤命令(3)--⽂件管理(查看⽂件⼤⼩权限信息、修改⽂件所属⽤户和操作权限、压。
⼀、查看⽂件⼤⼩、⽂件夹⼦⽬录1、查看⽂件系统磁盘⼤⼩、挂载点df :可以查看⼀级⽂件夹⼤⼩(默认单位为:k)、使⽤⽐例、档案系统及其挂⼊点(但对⽂件却⽆能为⼒)。
df -T :显⽰分区的⽂件系统(不带单位,默认为k;结果中包含分区⽂件类型Type)df -h :显⽰⽂件系统的可⽤空间及使⽤情形(采⽤⽤户易读的⽅式)概念解析:挂载点 Linux是树型⽬录结构,Linux只有⼀个根⽬录'/',其余各个⽬录都是基于这个根⽬录发散,就是树形结构。
Linux分区是将某个分区挂到⼀个对应的⽬录上。
例如/home对应⼀块分区,home⽬录就是这块分区的挂载点;/boot对应 虽然硬盘分区表中最多能存储四个分区,但我们实际使⽤时⼀般只分为两个分区,⼀个是主分区(Primary Partion)⼀个是扩展分区(extended partition)两种,主分区可以马上被使⽤但不能再分区,扩展分区必须再进⾏分区后才能使⽤,也就是说它必须还要进⾏⼆次分区。
那么由扩充分区再分下去的是什么呢?它就是逻辑分区(LogicalPartion),况且逻辑分区没有数量上限制。
Linux⽆论有⼏个分区,分给哪⼀⽬录使⽤,它归根结底就只有⼀个根⽬录,⼀个独⽴且唯⼀的⽂件结构。
每个分区都是⽤来组成整个⽂件系统的⼀部分,因为它采⽤了⼀种叫“挂载点”的处理⽅法,它的整个⽂件系统中包含了⼀整套的⽂件和⽬录,且将⼀个分区和⼀个⽬录联系起来。
这时要载⼊的⼀个分区将使它的存储空间在⼀个⽬录下获得。
Linux的分区是不同于其它操作系统的分区,它的分区格式常⽤的有Ext3和Swap两种,Ext3⽤于存放系统⽂件,Swap则作为交换分区(相当于windows中的虚拟内存⽂件)。
推荐阅读:概念解析:tmpfs tmpfs是⼀种虚拟内存⽂件系统,⽽不是块设备。
suse 操作系统常用命令SUSE操作系统常用命令SUSE操作系统是一种基于Linux的操作系统,常用于服务器和企业级应用程序。
了解并掌握SUSE操作系统的常用命令对于管理员和开发人员来说非常重要。
本文将介绍一些SUSE操作系统常用命令,帮助读者更好地管理和操作SUSE系统。
一、文件和目录管理命令1. ls命令:用于列出目录中的文件和子目录。
例如,ls -l命令可以显示文件的详细信息,ls -a命令可以显示所有文件包括隐藏文件。
2. cd命令:用于切换当前工作目录。
例如,cd /var/log可以切换到/var/log目录。
3. pwd命令:用于显示当前工作目录的路径。
4. touch命令:用于创建一个空文件。
例如,touch example.txt 可以创建一个名为example.txt的空文件。
5. cp命令:用于复制文件或目录。
例如,cp file1 file2可以将file1复制到file2。
6. mv命令:用于移动文件或目录,也可以用于重命名文件。
例如,mv file1 file2可以将file1移动到file2,mv file1 newname可以将file1重命名为newname。
7. rm命令:用于删除文件或目录。
例如,rm file1可以删除file1文件,rm -r dir1可以删除dir1目录及其所有内容。
8. mkdir命令:用于创建目录。
例如,mkdir newdir可以创建一个名为newdir的目录。
二、系统管理命令1. top命令:用于实时监视系统的运行状态,包括CPU、内存和进程等信息。
2. ps命令:用于显示当前运行的进程。
例如,ps aux可以显示所有进程的详细信息。
3. kill命令:用于终止正在运行的进程。
例如,kill PID可以终止指定PID的进程。
4. reboot命令:用于重启系统。
例如,reboot命令将立即重启系统。
5. shutdown命令:用于关闭系统。
计算机浏览查找管理文件的操作方法
在计算机上浏览、查找和管理文件的方法有多种,以下提供两种方法:
方法一:
1. 打开桌面上的“计算机”程序窗口。
2. 在左侧选择你希望查找的磁盘。
比如你大概记得文件是保存在E盘,那么就选择E盘。
如果你不知道保存在哪里了,就选择“计算机”,这样程序就会在整个磁盘中去查找,但更费时间。
3. 如果用户记得要查找文件的文件名,可以在搜索框中输入文件名;如果只记得部分文件名,也可以在搜索框中输入。
4. 当用户在搜索框中输入文件名时,系统会立即搜索包括该文字的文件,并在下方实时展示出来。
5. 当显示用户所需的文件时,可以右键单击该文件,然后从弹出的右键单击菜单中选择“打开文件位置”命令。
6. 此时将打开一个窗口,显示文件和文件所在的文件夹。
通过这种方式,您可以找到存储在计算机中的文件。
方法二:
1. 按WIN键,或从任务栏左下角开始按钮附近选择搜索栏。
2. 开始键入你要查找的文件、应用程序或其他项目的名称,但现在不要按Enter键。
3. 结果立即显示。
注意顶部的类别;这是你可以根据文档、电子邮件、文件夹、音乐、照片等内容过滤结果的地方。
“更多”菜单是你可以找到其中大部分内容的地方。
4. 选择要打开的项目。
你可以通过触摸、鼠标或使用上下箭头键高亮显示并按Enter键来执行此操作。
以上是两种常用的浏览、查找和管理文件的方法,希望对你有所帮助。
如果仍有疑问,建议查阅相关计算机书籍或咨询专业人士。
实验Linux文件和目录操作实验Linux文件和目录操作(1)一、实验内容练习Linux文件和目录操作命令。
二、实验目的掌握文件与目录管理命令掌握文件内容查阅命令三、实验题目1. 文件与目录管理(1) 查看CentOS根目录下有哪些内容?(2)进入/tmp目录,以自己的学号建一个目录,并进入该目录。
(3)显示目前所在的目录。
(4)在当前目录下,建立权限为741的目录test1,查看是否创建成功。
(5)在目录test1下建立目录test2/teat3/test4。
(6)进入test2,删除目录test3/test4。
(7)将root用户家目录下的.bashrc复制到/tmp下,并更名为bashrc (8)重复步骤6,要求在覆盖前询问是否覆盖。
(9)复制目录/etc/下的内容到/tmp下。
(10)在当前目录下建立文件aaa。
(11)查看该文件的权限、大小及时间(12)强制删除该文件。
(13) 将/tmp下的bashrc移到/tmp/test1/test2中。
(14) 将/test1目录及其下面包含的所有文件删除。
2. 文件内容查阅、权限与文件查找(1) 使用cat命令加行号显示文件/etc/issue的内容。
(2) 反向显示/etc/issue中的内容。
(3) 用nl列出/etc/issue中的内容。
(4) 使用more命令查看文件/etc/man.config(5) 使用less命令前后翻看文件/etc/man.config中的内容(6) 使用head命令查看文件/etc/man.config前20行(7) 使用less 命令查看文件/etc/man.config后5行(8) 查看文件/etc/man.config前20行中后5行的内容(9) 将/usr/bin/passwd 中的内容使用ASCII方式输出(10) 进入/tmp目录,将/root/.bashrc复制成bashrc,复制完全的属性,检查其日期(11) 修改文件bashrc的时间为当前时间四、实验指导1. 文件与目录管理(1)查看CentOS根目录下有哪些内容?ls /(2)进入/tmp目录,以自己的学号建一个目录,并进入该目录。
3 文件目录管理与显示1、题目的内容和要求给出目录和文件信息,要求编程实现将其排列成一棵有一定缩进的树。
(1)设计文件和目录信息树的存储结构。
(2)从文件或键盘输入目录和文件信息,输入格式采用绝对路径法,即:\A\A\AA1\A\AA1\aa1.doc…创建时要检查同一路径下不能有同名的目录或文件名。
(3)设计文件和目录信息树的输出格式(以凹入表的形式显示)。
(4)查找指定目录和文件。
(5)添加新目录或新文件。
(6)删除指定目录或文件,子目录能够被删除的前提是其为空,既不包含任何子目录和文件;根目录不能删除。
(7)扩充目录或文件信息,如创建时间、读写权限、文件长度或子目录包含的子目录和文件数等。
(8)对同一层次下的子目录或文件按创建时间有序输出。
选做内容:(1)如何实现相对路径表示法。
(2)通配符的使用。
如用“?”代表任意一个字符,用“*”表示任意多个多个任意字符。
2、设计2.1设计思想(1)数据结构设计:本体由于要对文件目录的处理,在一个文件中可以存放多个文件,所以用树,并且用孩子兄弟表示法,表示该树。
(2)算法设计:当在该目录下添加,查找,删除子目录时,相当于在该目录下对其孩子结点的处理,根据树建立和结点的孩子兄弟结点的处理来实现。
2.2设计表示调用函数TreeInitiate(SibTree *t)调用函数insertRoot( )调用函数insertChild( )2.3 详细设计编写树的建立和孩子结点的添加、删除、搜索等函数是比较简单的,关键在函数中怎么去判断是给其插入孩子结点还是兄弟结点,在删除时还要判断该目录是否有子目录或者子文件……这些都要在写程序时考虑进去,我认为这个题的难点还是在输出上,因为要按照题目要求,以凹入法输出,在输出函数中就要想到用递归法来处理该问题。
3、调试在写的过程中,没写一个函数都进行一次调试操作,以验证函数的正确性,在写完后,曾遇到过这样的情况:给一个结点的兄弟插入孩子结点时,出现了错误插入,变成了给该结点插入孩子结点,经过一步步的调试发现少一个判断过程,来判断这个结点是不是要插入的目的结点,通过修改问题被解决。
4、用户手册此程序在VC 下运行,在运行时要按照每一步的提示的规格去进行操作5、测试数据和结果截图(1)初始时运行如图(2)进行添加操作,以输入0结束(3)进行查找操作继续添加文件 调用add () 删除文件 调用Delete () 查找文件 调用check( ) 输出文件目录 调用out ()(4)进行删除操作如果有子目录则不能删除或子文件没有子目录或子文件时(5)进行输出操作(6)退出时输入5即可退出6、源程序清单(1)测试源文件test.cpp#include <stdio.h>#include <malloc.h>#include <string>#include <iostream>#include <sstream>using namespace std;#include "Sibtree.h"void add(SibTree *t1){printf("输入目录文件信息以输入0结束:\n"); SibTreeNode *r, *r1,*r2;char ifm[1000]={'\0'},name1[50],name2[50]; char *str;int i,j,n;while(1){cin>>ifm;str=ifm;if(*str=='0')break;r=t1->root;if (r==NULL){for (i=0,str+=1;*str!='\\'&&*str!='\0';str++,i++){name1[i]=*str;}name1[i]='\0';if(*str=='\0')insertRoot(t1,name1);elseprintf("%s的路径不存在,不能添加\n",name1);}else{for (i=0,str+=1;*str!='\\'&&*str!='\0';str++,i++){name1[i]=*str;}name1[i]='\0';if(search(t1,name1)==0&&*str=='\0'){insertnextSibing(t1,r,name1);}if(search(t1,name1)==0&&*str!='\0')printf("%s的路径不存在,不能添加\n",name1);r1=LevelOrderTraverse(t1->root,name1);while(r1!=NULL){if(*str=='\0')break;for (i=0,str+=1;*str!='\\'&&*str!='\0';str++,i++){name2[i]=*str;}name2[i]='\0';if(*str=='\0'){if(insertChild(t1,r1,name2)){break;}}else{n=children(r1);for(j=1;j<=n;j++){if(strcmp(child(r1,j)->data,name2)==0)break;}if(j<=n)r2=child(r1,j);else r2=NULL;if(r2==NULL)printf("%s的路径不存在,不能添加\n",name2);}n=children(r1);for(j=1;j<=n;j++){if(strcmp(child(r1,j)->data,name2)==0)break;}if(j<=n)r1=child(r1,j);else r1=NULL;}}}}void check(SibTree *t){SibTreeNode *r;printf("输入要查找的文件名:");char name[50];cin>>name;r=LevelOrderTraverse(t->root,name);if(r==NULL)printf("没有此文件\n");else{printf("此文件找到,创建时间为:");printf("%d/%d/%d %d:%d:%d",r->year,r->month,r->day,r->hour,r->minute,r->second);printf("\t子目录个数为:");printf("%d\n",children(r));}}void Delete(SibTree *t){SibTreeNode *r,*p,*kid;printf("输入要删除的文件名:");char name[50];cin>>name;r=LevelOrderTraverse(t->root,name);if(r==NULL)printf("没有此文件!\n");else{if(r->firstChild!=NULL)printf("有子文件不能删除!\n");else{p=r->parent;kid=p->firstChild;if(strcmp(kid->data,r->data)==0)p->firstChild=kid->nextSibling;else{while(strcmp(kid->nextSibling->data,r->data))kid=kid->nextSibling;kid->nextSibling=kid->nextSibling->nextSibling;}printf("已删除!\n");}}}void out(SibTree *t){printf("输出文件目录的信息:\n");printf("root:\n");printf("%s",toString(t).c_str());}void main( ){SibTree t1;int k;TreeInitiate(&t1);while(1){printf("\n");printf("\t 文件管理\t\n");printf("\t********************************************************\t\n");printf("\t *************对照号码输入你要进行的操作*************\n");printf("\t 1 ——>添加\n");printf("\t 2 ——>查找\n");printf("\t 3 ——>删除\n");printf("\t 4 ——>输出\n");printf("\t 5 ——>退出\n");printf("输入你想进行的操作号码:");scanf("%d",&k);if(k==5)break;switch (k){case 1: add(&t1);break;case 2: check(&t1);break;case 3: Delete(&t1);break;case 4: out(&t1);break;default:printf("输入号码错误!\n");}}}(2)包含的头文件Sibtree.h#include <windows.h> SYSTEMTIME sys;typedef struct SibTreeNode{char data[50];int valid;int year;int month;int day;int hour;int minute;int second;int sonmulu;int sonfile;struct SibTreeNode * parent;struct SibTreeNode *firstChild;struct SibTreeNode *nextSibling;}SibTreeNode;typedef struct{SibTreeNode *root;int size;}SibTree;typedef SibTreeNode *QueueDataType; #include "SeqCQueue.h"int IsTreeEmpty(SibTree *t){return t->size == 0;}int isValidNode(SibTreeNode *p){if(p)return p->valid;else return 0;}//创建一个空树void TreeInitiate(SibTree *t){t->root = NULL;t->size = 0;}//创建结点SibTreeNode * newSibTreeNode(char x[50]){GetLocalTime(&sys);SibTreeNode *p=(SibTreeNode *)malloc(sizeof(SibTreeNode));strcpy(p->data,x);p->valid = true;p->year = sys.wYear;p->month = sys.wMonth;p->day = sys.wDay;p->hour = sys.wHour;p->minute = sys.wMinute;p->second = sys.wSecond;p->sonmulu=5; //扩充的信息,限制子目录的个数p->sonfile=1; //限制子文件的个数p->parent = NULL;p->firstChild = NULL;p->nextSibling = NULL;return p;}//创建包含一个结点的树void onenodeSibTree(SibTree *t,char x[50]){t->root = newSibTreeNode(x);strcpy(t->root->data,x);t->size = 1;}//输出当前结点的父亲节点SibTreeNode *root(SibTreeNode *p){if (p == NULL){p= (SibTreeNode*)malloc(sizeof(SibTreeNode));return p;}else{return p;}}//插入根节点void insertRoot(SibTree *t,char x[50]){SibTreeNode * newRoot = newSibTreeNode(x);newRoot->firstChild = t->root;if (t->root != NULL){t->root->parent = newRoot;}t->root = newRoot;t->size++;}// 输出树的大小int size(SibTree *t){return t->size;}// 构造一个不合法的结点SibTreeNode * invalidSibTreeNode (){SibTreeNode *p=(SibTreeNode *)malloc(sizeof(SibTreeNode));p->valid = false;return p;}//当前结点的孩子的个数int children(SibTreeNode *p)int count = 0;SibTreeNode *countNode;if (isValidNode(p)){countNode= p->firstChild;while (countNode != NULL){count++;countNode = countNode->nextSibling;}return count;}else{return 0;}}//返回当前结点的cth孩子结点SibTreeNode *child(SibTreeNode *p,int c){if (isValidNode(p)){if (c < 1){return invalidSibTreeNode ();}SibTreeNode *kid = p->firstChild;while ((kid != NULL) && (c > 1)){kid = kid->nextSibling;c--;}if (kid == NULL){return invalidSibTreeNode();}else{return kid;}}elsethrow "the node is not a valid node!";}//返回当前结点的兄弟结点SibTreeNode *nextSibling(SibTreeNode *p){if (isValidNode(p)){if (p->nextSibling == NULL){return invalidSibTreeNode();}else{return p->nextSibling;}}else{throw "the node is not a valid node!";return invalidSibTreeNode();}}//插入孩子结点int insertChild(SibTree *t,SibTreeNode *p, char x[50]) {SibTreeNode *n;int i,flog=0;for(i=0;x[i]!='\0';i++){if(x[i]=='.'){flog=1;break;}}if(isValidNode(p)){n=p->firstChild;if(n==NULL){p->firstChild=newSibTreeNode(x);p->firstChild->parent=p;}elsewhile(n!=NULL){if(strcmp(n->data,x)==0){printf("输入的文件有重名,请更改名字!");break;}if(n->nextSibling==NULL)break;n=n->nextSibling;}if(strcmp(n->data,x)!=0){if(flog==1&&children(n->parent)<n->parent->sonfile){n->nextSibling=newSibTreeNode(x);n->nextSibling->parent=p;}elseif(flog==1)printf("文件数超出,不能继续存储\n");elseif(flog==0&&children(n->parent)<n->parent->sonmulu){n->nextSibling=newSibTreeNode(x);n->nextSibling->parent=p;}else if(flog==0)printf("子目录超出,不能继续存储\n");}}t->size++;return 1;}else return 0;}//为当前结点插入兄弟结点int insertnextSibing(SibTree *t,SibTreeNode *p, char x[50]){SibTreeNode *n;if(isValidNode(p)){n=p->nextSibling;if(n==NULL)p->nextSibling=newSibTreeNode(x);else{while(n->nextSibling!=NULL)n=n->nextSibling;n->nextSibling=newSibTreeNode(x);n->nextSibling->parent=p->parent;}t->size++;return 1;}else return 0;//层序遍历SibTreeNode *LevelOrderTraverse (SibTreeNode *t, char a[50]) {SeqCQueue Q;SibTreeNode *x;if(t==NULL)return NULL;QueueInitiate(&Q);QueueAppend(&Q,t);x=t->nextSibling;while(x!=NULL){QueueAppend(&Q,x);x=x->nextSibling;}while(QueueNotEmpty(Q)){QueueDelete(&Q,&x);if(strcmp(x->data,a)==0)break;x=x->firstChild;while(x!=NULL){QueueAppend(&Q,x);x=x->nextSibling;}}return x;}//查找是否存在int search(SibTree *t,char x[50]){if(LevelOrderTraverse(t->root,x)==NULL)return 0;else return 1;}string preorderString(SibTreeNode *currentNode, int depth){string s=" ";stringstream out;if (currentNode == NULL){return "";}for (int i = 0; i < depth; i++){s = s + " ";}out << currentNode->data;s+=out.str();s+="\n";s+=preorderString(currentNode->firstChild, depth + 1) ;s+=preorderString(currentNode->nextSibling, depth);return s;}string toString(SibTree *t){return preorderString(t->root, 0);}(3)包含头文件SeqCQueue.htypedef struct{QueueDataType queue [50];int front;int rear;int count; /* 队列的当前表长*/} SeqCQueue;//初始化void QueueInitiate(SeqCQueue *Q){Q->front=0;Q->rear=0;Q->count=0;}//判断队列非空int QueueNotEmpty(SeqCQueue Q){if(Q.count!=0) return 1;else return 0;}//入队列int QueueAppend(SeqCQueue *Q,QueueDataType x)if(Q->count>0 && Q->rear==Q->front){printf("队列已满无法插入!\n");return 0;}else{Q->queue[Q->rear]=x;Q->rear=(Q->rear+1)%50;Q->count++;return 1;}}//出队列int QueueDelete(SeqCQueue *Q,QueueDataType *x) {if(Q->count==0){printf("队列已空无数据元素出队列!\n");return 0;}else{*x=Q->queue[Q->front];Q->front=(Q->front+1)%50;Q->count--;return 1;}}//取对头数据元素int QueueGet(SeqCQueue *Q,QueueDataType *x) {if(Q->count==0){printf("队列已空无数据元素出队列!\n");return 0;}else{*x=Q->queue[Q->front];return 1;}}。