问答题 UNIX的文件/目录结构如左图所示,木表示目录,括弧内的数字是文件/目录的大小。(1)试设计一种数据结构表达这种关系。(2)设计一种算法,输出如右图所示的结果(次序和数字不能改变)。
【正确答案】正确答案:用树形结构表示这种文件/目录结构。题中的输出是对树进行后根遍历的结果,括号内数字代表文件大小:原文件(*.c和*.txt)是叶子结点,其大小照原大小输出,子目录文件的大小是其本身大小和其目录下的文件大小之和。设树用孩子兄弟链表表示。 typedef struct CSNode {char name[maxsize]; //目录(文件)名,maxsize为文件名最大长度 int byt; //文件大小 struct CSNode*fch,*nsib; //第一子女,兄弟 }CSNode,*CSTree; int num; //计算子目录下的文件大小 int ByteNumber(CSTree t) {if(t) {ByteNumber(t一>fch); num+=t一>byt ; ByteNumber(t一>nsib ; }if }//结束 void Inorder(CSTree t) (if(t) (Inorder(t一>fch); if(t一>fch==null) printf(“%s(%d)\n”,t一>name,t一>byt);lit是叶子,直接输出 else //计算子目录下文件大小 {num=0;num=ByteNumber(t); printf C%s(“%d)\n”,t一>name,num); //输出子目录大小 } InOrder(t->nsib); } }
【答案解析】