当初看linux时感觉他的通用连接件设计得非常巧妙,于是我写了一个,秉承了他的思想.写通用连接件的目的是为后续开发中的树型关系数据与线性关系数据提供一致的节点连接,连接件在数据节被创建是被嵌入到数据节点中,并最终返回连接件指针作为外部访问数据节点的一致入口,以求接口展示的简洁与一致性,并对内部数据起到隐藏与降低被非法篡改的危险性.一.连接件的定义:连接件的结构是一个双端链表结构,定义下:typedef struct link* linkptr ;typedef struct link{linkptr prior; /*连接件的前趋指针*/linkptr next; /*连接件的后续指针*/int tag; /*连接件的宿主数据节点的类型*/}link;
/*定义连接件的宿主数据节点的类型*/typedef enum{lkroot = 0, /*根节点*/lkhashentry = 1, /*哈希表子项节点*/lkhashtable = 2, /*哈希表节点*/...}linktype; 【程序编程相关:构建自己的基于 Java 的超级计算机】
/*指明链表中的两个特殊位置*/#define link_first (linkptr)0x00000000 /*链表首位*/#define link_last (linkptr)0xffffffff /*链表末位*/ 【推荐阅读:JDBC 概述(二)】
连接件链表由根节点与数据承节点组成,根节点是数据节点的桩连接件指针,用于控制与连接子数据节点,数据承节点是数据节点本身的连接件,用于返回给外部作为连接或访问之用.实现如下: 【扩展信息:提高Java代码可重用性的三个措施】
二.连接件的实现:
/*初始化根节点root: 根节点指针*/void initrootlink(linkptr root){assert(root);root->tag == lkroot; /*置为根节点*/root->next = root; /*后继指向根节点*/root->prior = root; /*前驱指向根节点*/}
/*在链表中插入一连接件root: 根节点指针plk: 参考位置的连接件指针pnew: 待插入的连接件指针*/void insertlinkat(linkptr root,linkptr plk,linkptr pnew){assert(root);assert(root->tag == lkroot);assert(root != plk);assert(pnew);
if(plk == link_first){plk = root;/*如果参考指针为首位标识,则前驱指针为根指针*/}else if(plk == link_last){plk = root->prior;/*如果参考指针为末位标识,则前驱指针为末位指针*/}else{assert(getrootlink(plk) == root); /*断言参考指针应在链表中*/}
... 下一页