postgresql 集合类型_PostgreSQL源码里面的List结构

PostgreSQL中广泛使用了一种List数据结构,该结构是一个单链表。其定义在pg_list.h和list.c文件中:typedef struct ListCell ListCell;

typedef struct List

{

NodeTagtype;/* T_List, T_IntList, or T_OidList */

intlength;

ListCell *head;

ListCell *tail;

} List;

struct ListCell

{

union

{

void *ptr_value;

intint_value;

Oidoid_value;

}data;

ListCell *next;

};

List是链表的表头,包含四个成员:

• type:该成员是一个枚举类型,有三个取值:T_List、T_IntList、T_OidList,用于表示该链表里面数据的类型。

• length:列表的长度。

• head:列表的头指针

• tail:列表的尾指针

ListCell是链表的每一个表节点类型,包含一个联合和一个指针:

• 联合里面有三种类型的取值,一个无类型指针,和两个整形(Oid一般定义为整形),这里的取值和链表头List里面的type成员对应。通过这个联合,我们可以定义三种类型的单链表。

• next指针指向下一个节点。

当然,光有数据结构还不行,PG还定义了一套非常丰富的创建、初始化、增、删、遍历的函数。对于比较简单的实现为静态内联函数。因为函数都比较简单,这里不再一一介绍。单链表是我们平时编程里面使用非常普遍的数据结构,我觉得PG里面的实现可以作为我们的一个借鉴。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值