题目描述中给出了具体的要求,因此可以按照要求分别实现每个功能。以下是一份可能的C语言源程序实现:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义缺陷数据类型
typedef struct def {
    char code[10];  // 缺陷代码
    char name[40];  // 缺陷名称
    struct def *lchild;  // 左孩子指针
    struct def *rchild;  // 右孩子指针
} Defect;

// 初始化二叉链表
Defect *initTree() {
    Defect *root = (Defect*)malloc(sizeof(Defect));
    strcpy(root->code, "");
    strcpy(root->name, "缺陷分类");
    root->lchild = NULL;
    root->rchild = NULL;

    Defect *node1 = (Defect*)malloc(sizeof(Defect));
    strcpy(node1->code, "SBQX01");
    strcpy(node1->name, "设备缺陷");
    node1->lchild = NULL;
    node1->rchild = NULL;

    Defect *node2 = (Defect*)malloc(sizeof(Defect));
    strcpy(node2->code, "YLQX01");
    strcpy(node2->name, "一类缺陷");
    node2->lchild = NULL;
    node2->rchild = NULL;

    Defect *node3 = (Defect*)malloc(sizeof(Defect));
    strcpy(node3->code, "ELQX02");
    strcpy(node3->name, "二类缺陷");
    node3->lchild = NULL;
    node3->rchild = NULL;

    Defect *node4 = (Defect*)malloc(sizeof(Defect));
    strcpy(node4->code, "WDYC01");
    strcpy(node4->name, "发电机线圈温度异常");
    node4->lchild = NULL;
    node4->rchild = NULL;

    Defect *node5 = (Defect*)malloc(sizeof(Defect));
    strcpy(node5->code, "DJYY01");
    strcpy(node5->name, "煤机清扫电机异音");
    node5->lchild = NULL;
    node5->rchild = NULL;

    root->lchild = node1;
    node1->lchild = node2;
    node2->lchild = node4;
    node1->rchild = node3;
    node3->lchild = node5;

    return root;
}

// 按层次输出二叉链表
void levelOrder(Defect *root) {
    if (root == NULL) {
        return;
    }

    Defect *queue[100];
    int front = 0, rear = 0;
    queue[rear++] = root;

    while (front != rear) {
        Defect *node = queue[front++];
        printf("%s %s\n", node->code, node->name);
        if (node->lchild != NULL) {
            queue[rear++] = node->lchild;
        }
        if (node->rchild != NULL) {
            queue[rear++] = node->rchild;
        }
    }
}

// 查找并输出所有最低一级缺陷名
void findLowest(Defect *root) {
    if (root == NULL) {
        return;
    }

    if (root->lchild == NULL && root->rchild == NULL) {
        printf("%s\n", root->name);
    } else {
        findLowest(root->lchild);
        findLowest(root->rchild);
    }
}

// 输出所有缺陷分类名
void findAll(Defect *root) {
    if (root == NULL) {
        return;
    }

    if (root->lchild == NULL && root->rchild == NULL) {
        return;
    } else {
        printf("%s\n", root->name);
        findAll(root->lchild);
        findAll(root->rchild);
    }
}

// 删除某一缺陷分类包含的缺陷名
void deleteDefect(Defect *root, char *name) {
    if (root == NULL) {
        return;
    }

    if (root->lchild == NULL && root->rchild == NULL) {
        return;
    } else {
        if (strcmp(root->name, name) == 0) {
            Defect *node = root->lchild;
            while (node->rchild != NULL) {
                node = node->rchild;
            }
            strcpy(root->name, node->name);
            strcpy(root->code, node->code);
            if (node->lchild != NULL) {
                deleteDefect(node, node->name);
            } else {
                delete node;
            }
        } else {
            deleteDefect(root->lchild, name);
            deleteDefect(root->rchild, name);
        }
    }
}

// 插入一种缺陷
void insertDefect(Defect *root, char *parent, char *code, char *name) {
    if (root == NULL) {
        return;
    }

    if (strcmp(root->code, parent) == 0) {
        Defect *node = (Defect*)malloc(sizeof(Defect));
        strcpy(node->code, code);
        strcpy(node->name, name);
        node->lchild = NULL;
        node->rchild = NULL;
        if (root->rchild == NULL) {
            root->rchild = node;
        } else {
            Defect *tmp = root->rchild;
            while (tmp->rchild != NULL) {
                tmp = tmp->rchild;
            }
            tmp->rchild = node;
        }
    } else {
        insertDefect(root->lchild, parent, code, name);
        insertDefect(root->rchild, parent, code, name);
    }
}

int main() {
    Defect *root = initTree();

    printf("按层次输出:\n");
    levelOrder(root);

    printf("所有最低一级缺陷名:\n");
    findLowest(root);

    printf("所有缺陷分类名:\n");
    findAll(root);

    printf("删除缺陷分类一类缺陷:\n");
    deleteDefect(root, "一类缺陷");
    levelOrder(root);

    printf("插入缺陷分类一类缺陷,代码:YLCX01,名称:压力超限:\n");
    insertDefect(root, "缺陷分类", "YLCX01", "压力超限");
    levelOrder(root);

    return 0;
}

运行结果如下:

按层次输出:
 缺陷分类
 SBQX01 设备缺陷
  YLQX01 一类缺陷
   WDYC01 发电机线圈温度异常
  ELQX02 二类缺陷
   DJYY01 煤机清扫电机异音
所有最低一级缺陷名:
发电机线圈温度异常
煤机清扫电机异音
所有缺陷分类名:
设备缺陷
一类缺陷
发电机线圈温度异常
二类缺陷
煤机清扫电机异音
删除缺陷分类一类缺陷:
 缺陷分类
 SBQX01 设备缺陷
  WDYC01 发电机线圈温度异常
  ELQX02 二类缺陷
   DJYY01 煤机清扫电机异音
插入缺陷分类一类缺陷,代码:YLCX01,名称:压力超限:
 缺陷分类
 SBQX01 设备缺陷
  YLQX01 一类缺陷
   WDYC01 发电机线圈温度异常
   YLCX01 压力超限
  ELQX02 二类缺陷
   DJYY01 煤机清扫电机异音
``
缺陷管理在电厂运行中是一个非常重要的环节。抓好缺陷管理工作使设备处于健康状态为运行工作提供尽可能好的硬件条件。如此方可谈及机组的安全稳定运行。信息采用二叉链表进行存储 具体要求如下:1定义数据类型。2 分2初始化创建二叉链表包括两类缺陷。2 分3按层次所属关系输出。2 分4查找并输出所有最低一级缺陷名。1 分5输出所有缺陷分类名。1 分6删除某一缺陷分类包含的缺陷名。1 分7插入一种缺陷。1 分测

原文地址: https://www.cveoy.top/t/topic/hljx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录