C语言实现电厂缺陷管理系统:二叉链表存储与操作
C语言实现电厂缺陷管理系统:二叉链表存储与操作
问题描述
缺陷管理在电厂运行中是一个非常重要的环节。抓好缺陷管理工作,使设备处于健康状态,为运行工作提供尽可能好的硬件条件。如此方可谈及机组的安全稳定运行。
本文将使用二叉链表来存储电厂缺陷信息,并实现以下功能:
- 定义数据类型。
- 初始化创建二叉链表,包括两类缺陷。
- 按层次所属关系输出。
- 查找并输出所有最低一级缺陷名。
- 输出所有缺陷分类名。
- 删除某一缺陷分类包含的缺陷名。
- 插入一种缺陷。
测试数据
| 代码 | 名称 | |---|---| | 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;
}
代码说明
-
定义数据类型
使用
typedef struct node定义了节点结构体,包含缺陷名称data和指向左右子节点的指针lchild和rchild。 -
初始化创建二叉链表
init_node函数用于初始化一个节点,接收缺陷名称作为参数,并返回指向该节点的指针。 在main函数中,首先创建根节点root,并调用insert_node函数插入其他节点,构建二叉链表。 -
按层次所属关系输出
level_order函数使用层次遍历算法,将二叉链表中的所有节点按层次输出。 -
查找并输出所有最低一级缺陷名
find_lowest函数使用递归遍历二叉链表,找到所有叶子节点(即没有子节点的节点),并输出它们的缺陷名称。 -
输出所有缺陷分类名
find_branch函数使用递归遍历二叉链表,输出所有非叶子节点(即有子节点的节点),即所有缺陷分类名。 -
删除某一缺陷分类包含的缺陷名
delete_node函数使用递归遍历二叉链表,找到目标节点,并将其从二叉链表中删除。 -
插入一种缺陷
insert_node函数接收目标节点父节点名称和要插入的新节点名称作为参数,将新节点插入到父节点的子节点位置。
总结
本文介绍了如何使用C语言实现一个简单的电厂缺陷管理系统,并提供了完整的代码示例。该系统使用二叉链表存储缺陷信息,能够方便地对缺陷进行分类管理和分析。在实际应用中,可以根据需要对代码进行扩展,例如添加更完善的缺陷信息记录、查询、统计等功能。
原文地址: https://www.cveoy.top/t/topic/oRiJ 著作权归作者所有。请勿转载和采集!