数据结构~工作流的设计(链表结构)

简介:

从几年前做OA时接触过工作流的概念,那时还比较模糊,现在觉得清晰一些了,想把自己一些理解写出来,与大家分享!

工作流最简单的就是京东的订单处理,它其实就是个简单的工作流,每个节点可能有前驱节点(prev node)和后继节点(next node),如图:

而这个结构让我们想起了数据结构里的“链表”(链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。),更多链表的基础可以看我这篇文章。

而反映到C#中,我们可以把链接结构设计成这样的类,而对于数据表来说也是这样的数据结构:

反映到类中,是这样定义的:

1   public partial class WorkFlow_Info
2     {
3         public int ID { get; set; }
4         public Nullable<int> PrevNode { get; set; }
5         public Nullable<int> NextNode { get; set; }
6         public string Name { get; set; }
7         public string Info { get; set; }
8     }

它有一些导航属性,用来得到每个节点的前驱和后继节点信息:

 1     /// <summary>
 2     /// 工作流实体
 3     /// </summary>
 4     [MetadataType(typeof(WorkFlow_Info_Meta))]
 5     public partial class WorkFlow_Info
 6     {
 7         #region 导航属性
 8         /// <summary>
 9         /// 是否为首结点
10         /// </summary>
11         public bool IsFirstNode
12         {
13             get
14             {
15                 return this.PrevNode == null;
16             }
17         }
18         /// <summary>
19         /// 是否为尾结点
20         /// </summary>
21         public bool IsEndNode
22         {
23             get
24             {
25                 return this.NextNode == null;
26             }
27         }
28         /// <summary>
29         /// 前驱节点
30         /// </summary>
31         public WorkFlow_Info PrevNodeEntity { get; set; }
32         /// <summary>
33         /// 后继节点
34         /// </summary>
35         public WorkFlow_Info NextNodeEntity { get; set; }
36         #endregion
37     }

好了,有了上面的基础,我们把这个结构体现到实际项目中,如一个产品从建立到最后的上架,可能就是一个工作流,它的流程如:

建立产品=》审核产品信息=》产品订价=》产品上架

而我们再结合之前的链表结果,可以很容易的得到下面的结果了:

A产品是刚刚被建立,还没有进行审核(被建立)

B产品已经经过了审核(被审核)

C产品当前已经处于上价状态了(被上架)

总结:感谢数据结构真的很有用,如果想写出健壮的程序,看看计算机基础,数据结构导论,操作系统概论还是很有必要的,呵呵。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:数据结构~工作流的设计(链表结构),如需转载请自行联系原博主。

目录
相关文章
|
13天前
|
存储 搜索推荐 算法
【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)
本文介绍了树和二叉树的基本概念及结构,重点讲解了堆这一重要的数据结构。堆是一种特殊的完全二叉树,常用于实现优先队列和高效的排序算法(如堆排序)。文章详细描述了堆的性质、存储方式及其实现方法,包括插入、删除和取堆顶数据等操作的具体实现。通过这些内容,读者可以全面了解堆的原理和应用。
56 16
|
15天前
|
存储 C语言
【数据结构】手把手教你单链表(c语言)(附源码)
本文介绍了单链表的基本概念、结构定义及其实现方法。单链表是一种内存地址不连续但逻辑顺序连续的数据结构,每个节点包含数据域和指针域。文章详细讲解了单链表的常见操作,如头插、尾插、头删、尾删、查找、指定位置插入和删除等,并提供了完整的C语言代码示例。通过学习单链表,可以更好地理解数据结构的底层逻辑,提高编程能力。
43 4
|
17天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
17天前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
1月前
|
算法 Java
数据结构与算法学习五:双链表的增、删、改、查
双链表的增、删、改、查操作及其Java实现,并通过实例演示了双向链表的优势和应用。
16 0
数据结构与算法学习五:双链表的增、删、改、查
|
15天前
|
C语言
【数据结构】双向带头循环链表(c语言)(附源码)
本文介绍了双向带头循环链表的概念和实现。双向带头循环链表具有三个关键点:双向、带头和循环。与单链表相比,它的头插、尾插、头删、尾删等操作的时间复杂度均为O(1),提高了运行效率。文章详细讲解了链表的结构定义、方法声明和实现,包括创建新节点、初始化、打印、判断是否为空、插入和删除节点等操作。最后提供了完整的代码示例。
35 0
|
30天前
|
存储
[数据结构] -- 双向循环链表
[数据结构] -- 双向循环链表
21 0
|
1月前
探索顺序结构:栈的实现方式
探索顺序结构:栈的实现方式
|
1月前
|
存储
探索数据结构:便捷的双向链表
探索数据结构:便捷的双向链表
|
1月前
|
存储
探索数据结构:单链表的实践和应用
探索数据结构:单链表的实践和应用