BDS之链表

本文详细介绍了链表的四种常见类型:静态链表、单链表、双向链表和循环链表。静态链表使用数组实现,便于插入和删除元素。单链表是最基本的动态链式存储结构,灵活且易于操作。双向链表在单链表基础上增加了指向前后元素的指针,提供了双向访问能力。循环链表将尾结点与首结点相连,形成环状结构。文中还提到了Java中的LinkedList和C++ STL中的List作为链表应用的例子。
摘要由CSDN通过智能技术生成

 链表结构在日常的使用很广泛, 大大小小的软件系统或多或少,或直接或间接的都使用了链表,而关于链表,其又可以分为多种类型,常见的有静态链表,单向链表,双向链表,循环链表等等,除此之外,还有带头结点和不带头结点的链表之分,不过总体来说,这些链表在形态结构上都是类似的。

静态链表

静态链表是用数组实现的链式存储结构,典型的如下:

#define LIST_SIZE   10
typdef unsinged int uInt;
typedef strcut list_node
{
   eType e;
   uInt     next;
}st_link_list[LIST_SIZE];

相比于线性顺序存储结构,静态链表的最大优点在于删除和插入元素不需要移动任何元素,只需要修改“指针”,这里并不是真正意思上的指针,而实质上是静态数组的索引。

       

 静态链表存储结构图1              

 

存储有{a,b}两个元素的静态链表结构图  2     

  

  插入元素c后的静态链表结构图3

这里需要说明的是,静态链表将所有的空闲节点组织为备用链表,初始时数组下标为0的单元为该链表的头结点,而st_link_list[LIST_SIZE-1],也就是最后一个元素为链表的头结点,也就是说,静态链表上有两个链表,一个链表上链接的是线性表的结点,另一个链表上链接的是所有未被使用的结点。在图2和图3中我们说明链表加入元素时的过程,开始图2只有a,b两个元素,随后加入元素c后如图3.

单链表

单链表是最基本的具有动态特性的链式存储结构,它的存储结构如下:

typedef struct _list_node
{
   eType data;
   struct _list_node* next;
}list_node,*plist_node;

链表中当前的元素的next元素通过指针可以访问下个元素,对于删除和插入的操作,只是对链表的next指针进行操作,同时,由于是动态的增长,单链表比动态链表更加灵活。


                                                           带有头结点的单向链表示例图

单链表的结构非常相比静态链表简单很多,如上图链表有三个元素4,7,9.

双向链表

双向链表是对单链表进行的拓展,它的存储结构如下:

typedef struct _du_node
{
   eType data;
   struct _du_node* next;
   struct _du_node* prior;
}du_node,*pdu_node;

双向链表的节点元素包含了指向前驱节点和后继节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值