当前位置: 首页 > news >正文

网站建设费用归类网页游戏平台制作

网站建设费用归类,网页游戏平台制作,自己来建网站,搜索引擎营销简称为1、散列表数据结构 在Linux内核中#xff0c;散列表#xff08;哈希表#xff09;使用非常广泛。本文将对其数据结构和核心函数进行分析。和散列表相关的数据结构有两个#xff1a;hlist_head 和 hlist_node //hash桶的头结点 struct hlist_head {struct hlist_node *first…1、散列表数据结构 在Linux内核中散列表哈希表使用非常广泛。本文将对其数据结构和核心函数进行分析。和散列表相关的数据结构有两个hlist_head 和 hlist_node //hash桶的头结点 struct hlist_head {struct hlist_node *first;//指向每一个hash桶的第一个结点的指针 }; //hash桶的普通结点 struct hlist_node {struct hlist_node *next;//指向下一个结点的指针struct hlist_node **pprev;//指向上一个结点的next指针的地址 };对应的结构如下 hash_table 为散列表数组其中的元素类型为 struct hlist_head 。以 hlist_head 为链表头的链表其中的节点hash值是相同的也叫冲突。first指针指向链表中的节点①然后节点①的 pprev 指针指向 hlist_head 中 的 first 节点①的 next 指针指向节点②以此类推。hash_table 的列表头仅存放一个指针,也就是 first 指针,指向的是对应链表的头结点,没有tail指针,也就是指向链表尾节点的指针,这样的考虑是为了节省空间——尤其在 hash bucket (数组size)很大的情况下可以节省一半的指针空间。pprev是一个二级指针 它指向前一个节点的next指针的地址 。为什么我们需要这样一个指针呢它的好处是什么 哈希表的目的是为了方便快速的查找所以哈希表中hash桶的数量通常比较大否则“冲突”的概率会非常大这样也就失去了哈希表的意义。如何做到既能维护一张大表又能不使用过多的内存呢就只能从数据结构上下功夫了。所以对于哈希表的每个hash桶它的结构体中只存放一个指针解决了占用空间的问题。现在又出现了另一个问题数据结构不一致。显然如果hlist_node采用传统的nextprev指针对于第一个节点和后面其他节点的处理会不一致。hlist_node巧妙地将pprev指向上一个节点的next指针的地址由于hlist_head的first域指向的结点类型和hlist_node指向的下一个结点的结点类型相同这样就解决了通用性下面讲解结点相关操作的时候会有更详细的解释。 2、散列表删除结点 如果要删除hash桶对应链表中的第一个普通结点 对应的程序代码如下 static inline void __hlist_del(struct hlist_node *n) { struct hlist_node *next n-next;//获取指向第二个普通结点的指针 struct hlist_node **pprev n-pprev;//保留待删除的第一个结点的pprev域即头结点first域的地址此时 pprev first *pprev next; /*因为pprev first所以*pprev next相当于 first next即将hash桶的头结点指针指向原来的第二个结点如上图中的黑线1*/if (next) //如果第二个结点不为空next-pprev pprev;//将第二个结点的pprev域设置为头结点first域的地址如上图中的黑线2 }如果要删除hash桶对应链表中的非第一个结点 对应的程序代码如下 static inline void __hlist_del(struct hlist_node *n) { struct hlist_node *next n-next;//获取指向待删除结点的下一个普通结点的指针 struct hlist_node **pprev n-pprev;//获取待删除结点的pprev域 *pprev next; //修改待删除结点的pprev域逻辑上使待删除结点的前驱结点指向待删除结点的后继结点如上图中的黑线1if (next) //如果待删除结点的下一个普通结点不为空next-pprev pprev;//设置下一个结点的pprev域如上图中的黑线2保持hlist的结构 }可以看到删除第一个普通结点和删除非第一个普通结点的代码是一样的。 下面再来看看如果hlist_node中包含两个分别指向前驱结点和后继结点的指针。 很明显删除hash桶对应链表中的非第一个普通结点只需要如下两行代码 n-next-prev n-prev; n-prev-next n-next;可是如果是删除的hash桶对应链表中的第一个普通结点此时 n-prev-next n-next 就会出问题因为hash桶的表头结点没有next域所以明显在这种情况下删除hash桶对应链表的第一个普通结点和非第一个普通结点的代码是不一样的。 同理结点插入操作也存在同样的问题。
http://www.sadfv.cn/news/228487/

相关文章:

  • 环保厅网站建设的必要性朝阳区外贸公司有哪些
  • 大型网站制作需要多少钱上海网站开发公司
  • 电子商城网站设计实训报告企业网站 梦织
  • 做网站大概要多少网站建设的市场分析
  • 网站里自已的微信联系如何做汕头高端网站建设
  • python做网站还是数据无锡网站建设排名
  • 定制型网站 成功案例动漫制作技术是学什么
  • 网站开发软件开发流程图荆州市建设厅网站
  • ipad怎么制作网站怎么做招标公司网站
  • 如何使用模板网站建设网页淘宝网上购物商城
  • 深圳网站. 方维网络中国电商网站排行榜
  • 大型网站开发 书籍网站的备案的要多少钱
  • 南京 电子商务网站个人网站有哪些平台
  • 百度 wordpress插件seo入门培训
  • 西安做网站公司8无锡网络推广运营公司
  • 郑州网站建设三猫网络青岛微网站开发
  • 做淘宝头像的网站湖州专业做网站
  • 免费网站建设案例网站空间的后台控制面板
  • 济南网站搜索引擎优化博客可以做网站收录用的吗
  • 开锁公司网站建设沈阳制作公司网站和app
  • 网站备案多久一次扬州有做义工的地方或网站嘛
  • 全国网站集约化建设试点2核4G服务器wordpress
  • 织梦手机网站怎么做搜索引擎优化关键词选择的方法有哪些
  • 通州微网站优化湖南网站建设案例
  • 房地产论坛网站建设搭建网站用服务器还是虚拟主机
  • 兰州做网站优化西安网页设计培训班
  • 安论坛网站建设品牌升级策略
  • 免费的自建视频网站网站哪家公司做的好
  • 网站建设的步骤过程文库公司网络营销方案思路
  • 网站推广效果分析网站页面设计怎么收费