📄 aaa.txt
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define maxsize 100
//定义目录树的结构
typedef struct mu_lu{
char wenjian_name[80];
struct mu_lu *firstchild;
struct mu_lu *nextsibling;
}ziyuan,*mulu;
typedef struct {
char str[80];
}elemtype;
//定义一个存放父结点的栈
typedef struct father{
elemtype *base;
elemtype *top;
}fathername,*father_name;
//初始化栈
int Init(fathername &S){
S.top = S.base =new elemtype[maxsize];
if (!S.base) {
printf("空间申请失败!\n");
return 0;
}
return 1;
}
//数据进栈
int push(fathername &S,char *str){
if (S.top - S.base >= maxsize) {
printf("\n\n栈满!无法继续增加数据!\n\n");
return 0;
}
strcpy(S.top->str , str);
++S.top;
return 1;
}
//数据出栈
int pop(fathername &S){
if (S.top == S.base) {
printf("栈空!\n");
return 0;
}
--S.top;
return 1;
}
//打印出栈内路径
void Printstack(fathername S){
elemtype *q;
printf("\n\n");
for(q = S.base;q <S.top-1; q++)
printf("%s\\",q->str);
printf("%s\n\n",(S.top-1)->str);
}
//创建目录树的函数
void Creat_mulu(mulu &T){
char *wenjian_name = new char[80];
scanf("%s",wenjian_name);
if (*wenjian_name == '^') {
T = NULL;
return ;
}
T = new ziyuan;
if (!T) {
printf("空间申请失败!\n");
return ;
}
else{
strcpy(T->wenjian_name , wenjian_name);
T->firstchild = NULL;
T->nextsibling = NULL;
}
Creat_mulu(T->firstchild);// 构造左子树
Creat_mulu(T->nextsibling);// 构造右子树
}
//输出目录树
void Disp_mulu(mulu T,int times){
if (T == NULL)
return;
for (int i = 1; i < times; ++i)
printf(" ");
if(times>1){
printf("|------");
}
printf("%s\n", T->wenjian_name);
Disp_mulu(T->firstchild, times + 1);
Disp_mulu(T->nextsibling, times);
}
//查找要插入的目录的父节点
void find(mulu T,mulu &parent,char *parentname,int &findname){
if (T != NULL)
if (strcmp(parentname , T->wenjian_name) == 0) {
parent = T;
findname = 1;
return;
}
else{
find(T->firstchild,parent,parentname,findname);
find(T->nextsibling,parent,parentname,findname);
}
}
//查找新的目录名是否已经存在
void FIND(mulu child,char *childname,int &FINDname){
if (child)
{
if (strcmp(child->wenjian_name,childname) == 0){
FINDname = 1;
return;
}
else FIND(child->nextsibling,childname,FINDname);
}
return;
}
//插入新目录的函数
void Inser_mulu(mulu &T,char *parentname){
char *childname =new char[80];
mulu parent,child;
int findname = 0,FINDname = 0;
find(T,parent,parentname,findname);
if (findname) {
printf("\n\n请输入新目录的名:");
scanf("%s",childname);
FIND(parent->firstchild,childname,FINDname);
if (FINDname) {
printf("\n\n该目录名已经存在!\n");
return;
}
child = new ziyuan;
if (!child) {
printf("空间申请失败!\n");
return;
}
strcpy(child->wenjian_name , childname);
child->nextsibling = parent->firstchild;
child->firstchild = NULL;
parent->firstchild = child;
printf("\n\n>>>已成功插入!\n\n");
}
else printf("\n\n要插入的目录名不存在!\n\n");
}
//显示目录的路径
void Path(mulu T,fathername &S, char *name)
{
mulu p;
if(T==NULL) return;
else{
if(strcmp(T->wenjian_name,name)==0)
Printstack(S);
else{
push(S, T->wenjian_name);
Path(T->firstchild, S, name);
pop(S);
p=T->nextsibling;
while(p){
Path(p, S, name);
p=p->nextsibling;
}
}
}
}
//销毁目录树
void Destroy_mulu(mulu &T){
if(T!=NULL){
Destroy_mulu(T->firstchild);
Destroy_mulu(T->nextsibling);
delete T;
T = NULL;
}
}
//删除文件
void Delete_mulu(char *delete_name,mulu &T){
mulu p;
if (T == NULL)
return;
else if (T->firstchild&&strcmp(T->firstchild->wenjian_name,delete_name) == 0) {
p = T->firstchild;
T->firstchild = p->nextsibling;
p->nextsibling = NULL;
Destroy_mulu(p);
return;
}
else if (T->nextsibling&&strcmp(T->nextsibling->wenjian_name,delete_name) == 0) {
p = T->nextsibling;
T->nextsibling = p->nextsibling;
p->nextsibling = NULL;
Destroy_mulu(p);
return ;
}
Delete_mulu(delete_name,T->firstchild);
Delete_mulu(delete_name,T->nextsibling);
}
//主函数
int main (void){
mulu T;
fathername S;
char *mulu_name = new char[80];
char *parentname = new char[80];
char sz[80];
int times = 1;
int chioce;
while (1) {
printf("\t***********************资源管理器*************************\n");
printf("\t※(1)*****创 建\t\t\t(2)*****显示目录※\n");
printf("\t※ \t\t\t ※\n");
printf("\t※(3)*****显示路径\t\t\t(4)*****插 入※\n");
printf("\t※ \t\t\t ※\n");
printf("\t※(5)*****删 除\t\t\t(6)*****销 毁※\n");
printf("\t\t\t ※(0)*****退出※\n");
printf("\t**********************************************************\n");
printf("\n>>>>>>>>请输入选择(0~6):");
scanf("%d",&chioce);
switch(chioce){
case 1:
printf("\n请输入目录:");
getchar();
Creat_mulu(T);
printf("\n》》》目录树创建成功!\n\n");
break;
case 2:printf("\n\n");
if (T == NULL)
printf(">>>>>目录为空!\n\n");
else{
printf("********目录如下*******\n\n");
Disp_mulu(T,times);
}
printf("\n");
break;
case 3:Init(S);
printf("\n\n请输入目录名: ");
scanf("%s",sz);
Path(T,S,sz);
break;
case 4:printf("\n\t>>>1.在根目录下插入新文件\n\n");
printf("\t>>>2.在子目录下插入新文件\n\n");
printf("*******请选择:");
scanf("%d",&chioce);
if(chioce == 1){
printf("\n\n请输入新目录的名:");
getchar();
gets(sz);
mulu p;
p = new ziyuan;
if(!p){
printf("空间申请失败!\n");
break;
}
strcpy(p->wenjian_name , sz);
p->nextsibling = T->nextsibling;
T->nextsibling = p;
p->firstchild = NULL;
printf("\n\n>>>已成功插入!\n\n");
}
else if(chioce == 2)
{
printf("请输入父目录的名:");
getchar();
gets(sz);
Inser_mulu(T,sz);
}
else printf("选择错误!\n\n");
break;
case 5:
if(T==NULL) printf("\n\n>>>>>目录为空!\n\n");
else {
printf("请输入要删除的文件名:");
getchar();
gets(mulu_name);
if (strcmp(T->wenjian_name,mulu_name) == 0)
Destroy_mulu(T);
else Delete_mulu(mulu_name,T);
printf("\n\n》》删除成功!\n\n");
}
break;
case 6:Destroy_mulu(T);
printf("\n\n》》》》目录销毁成功!\n\n");
break;
case 0 :exit(0);
default:printf("输入错误!\n");
break;
}
}
return 0;
}
//大学课程 数学 练习 作业题目 ^ 考试题目 ^ ^ ^ 数据结构 专业课设 ^ ^ ^ ^
//英语
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -