C语言实现电厂缺陷管理系统:二叉链表存储与操作

问题描述

缺陷管理在电厂运行中是一个非常重要的环节。抓好缺陷管理工作,使设备处于健康状态,为运行工作提供尽可能好的硬件条件。如此方可谈及机组的安全稳定运行。

本文将使用二叉链表来存储电厂缺陷信息,并实现以下功能:

  1. 定义数据类型。
  2. 初始化创建二叉链表,包括两类缺陷。
  3. 按层次所属关系输出。
  4. 查找并输出所有最低一级缺陷名。
  5. 输出所有缺陷分类名。
  6. 删除某一缺陷分类包含的缺陷名。
  7. 插入一种缺陷。

测试数据

| 代码 | 名称 | |---|---| | SBQX01 | 设备缺陷 | | YLQX01 | 一类缺陷 | | ELQX02 | 二类缺陷 | | WDYC01 | 发电机线圈温度异常 | | DJYY01 | 煤机清扫电机异音 |

代码实现

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

//定义节点结构体
typedef struct node {
    char data[20]; //缺陷名称
    struct node *lchild, *rchild; //左子节点、右子节点
} Node;

//初始化节点
Node *init_node(char *data) {
    Node *node = (Node *) malloc(sizeof(Node));
    strcpy(node->data, data);
    node->lchild = NULL;
    node->rchild = NULL;
    return node;
}

//插入新节点
void insert_node(Node *root, char *parent, char *data) {
    if (root == NULL) {
        return;
    }
    if (strcmp(root->data, parent) == 0) {
        if (root->lchild == NULL) {
            root->lchild = init_node(data);
        } else {
            root->rchild = init_node(data);
        }
        return;
    }
    insert_node(root->lchild, parent, data);
    insert_node(root->rchild, parent, data);
}

//按层次输出
void level_order(Node *root) {
    if (root == NULL) {
        return;
    }
    Node *queue[100];
    int front = 0, rear = 0;
    queue[rear++] = root;
    while (front < rear) {
        Node *node = queue[front++];
        printf('%s ', node->data);
        if (node->lchild != NULL) {
            queue[rear++] = node->lchild;
        }
        if (node->rchild != NULL) {
            queue[rear++] = node->rchild;
        }
    }
    printf('
');
}

//查找最低一级缺陷名
void find_lowest(Node *root) {
    if (root == NULL) {
        return;
    }
    if (root->lchild == NULL && root->rchild == NULL) {
        printf('%s ', root->data);
    }
    find_lowest(root->lchild);
    find_lowest(root->rchild);
}

//输出所有分类名
void find_branch(Node *root) {
    if (root == NULL) {
        return;
    }
    printf('%s ', root->data);
    find_branch(root->lchild);
    find_branch(root->rchild);
}

//删除节点
void delete_node(Node *root, char *parent) {
    if (root == NULL) {
        return;
    }
    if (root->lchild != NULL && strcmp(root->lchild->data, parent) == 0) {
        free(root->lchild);
        root->lchild = NULL;
        return;
    }
    if (root->rchild != NULL && strcmp(root->rchild->data, parent) == 0) {
        free(root->rchild);
        root->rchild = NULL;
        return;
    }
    delete_node(root->lchild, parent);
    delete_node(root->rchild, parent);
}

int main() {
    //初始化二叉树
    Node *root = init_node('设备缺陷');
    insert_node(root, '设备缺陷', '一类缺陷');
    insert_node(root, '设备缺陷', '二类缺陷');
    insert_node(root, '一类缺陷', '发电机线圈温度异常');
    insert_node(root, '二类缺陷', '煤机清扫电机异音');

    //按层次输出
    printf('按层次输出:');
    level_order(root);

    //查找最低一级缺陷名
    printf('最低一级缺陷名:');
    find_lowest(root);
    printf('
');

    //输出所有分类名
    printf('所有分类名:');
    find_branch(root);
    printf('
');

    //插入新节点
    insert_node(root, '一类缺陷', '电动阀电气故障');
    insert_node(root, '二类缺陷', '继电保护装置');
    insert_node(root, '二类缺陷', '送风机绝缘值低');

    //按层次输出
    printf('插入新节点后按层次输出:');
    level_order(root);

    //删除节点
    delete_node(root, '二类缺陷');
    delete_node(root, '设备缺陷');

    //按层次输出
    printf('删除节点后按层次输出:');
    level_order(root);

    return 0;
}

代码说明

  1. 定义数据类型

    使用typedef struct node定义了节点结构体,包含缺陷名称data和指向左右子节点的指针lchildrchild

  2. 初始化创建二叉链表

    init_node函数用于初始化一个节点,接收缺陷名称作为参数,并返回指向该节点的指针。 在main函数中,首先创建根节点root,并调用insert_node函数插入其他节点,构建二叉链表。

  3. 按层次所属关系输出

    level_order函数使用层次遍历算法,将二叉链表中的所有节点按层次输出。

  4. 查找并输出所有最低一级缺陷名

    find_lowest函数使用递归遍历二叉链表,找到所有叶子节点(即没有子节点的节点),并输出它们的缺陷名称。

  5. 输出所有缺陷分类名

    find_branch函数使用递归遍历二叉链表,输出所有非叶子节点(即有子节点的节点),即所有缺陷分类名。

  6. 删除某一缺陷分类包含的缺陷名

    delete_node函数使用递归遍历二叉链表,找到目标节点,并将其从二叉链表中删除。

  7. 插入一种缺陷

    insert_node函数接收目标节点父节点名称和要插入的新节点名称作为参数,将新节点插入到父节点的子节点位置。

总结

本文介绍了如何使用C语言实现一个简单的电厂缺陷管理系统,并提供了完整的代码示例。该系统使用二叉链表存储缺陷信息,能够方便地对缺陷进行分类管理和分析。在实际应用中,可以根据需要对代码进行扩展,例如添加更完善的缺陷信息记录、查询、统计等功能。

C语言实现电厂缺陷管理系统:二叉链表存储与操作

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

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