鱼C论坛

 找回密码
 立即注册
查看: 4489|回复: 0

[技术交流] 链表、头指针、头结点

[复制链接]
发表于 2015-5-17 22:53:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 vanentu 于 2015-5-18 01:09 编辑

头指针 指示链表中第一个结点(即第一个数据元素的存储映像)的存储位置。同时,由于最后一个数据元素没有直接后继,则线性链表中最后一个结点的指针为“空”(NULL)                                                                  
由上述描述可见,单链表可由头指针来唯一确定,在C语言中可用“结构指针”来描述。

view plaincopy to clipboardprint?
//-----线性表的单链表存储结构-----   
typedef struct LNode{   
    ElemType   data;   
    struct LNode  *next;
}LNode, *LinkList;  
有时在单链表的第一个结点之前附设一个结点,称之为头结点 。 头结点的数据域可以不存储任何信息,也可以存储如线性表长度等类的附加信息,头结点的指针域存储指向第一个结点的指针(即第一个元素结点的存储位置),此时,单链表的头指针指向头结点。若线性表为空,则头结点的指针域为“空“
        循环链表 是另一种形式的链式存储结构。它的特点是表中最后一个节点的指针域指向头结点,整个链表形成一个环。由此,从表中任一结点出发均可找到表中其他结点。  
循环链表的操作和线性链表基本一致,差别仅在于算法中的循环条件不是p或p->next 是否为空,而是它们是否等于头指针,但有的时候,若在循环链表中设立尾指针而不设头指针,可使某些操作简化。例如将两个线性表合并成一个表时,仅需将一个表的尾表和另一个表的头表相接。当线性循环链表作存储结构时,这个操作仅需改变两个指针值即可,运算时间为O (1)
以上讨论的链式存储结构的节点中只有一个指示直接后继的指针域,由此,从某个结点出发只能顺指针往后寻查其他结点。若要寻查节点的直接前趋,则需从表头指针出发。换句话说,在单链表中,NextElem的执行时间为O(1),而PriorElem的执行时间为O(n)。为克服单链表这种单向性的缺点,可利用双向链表 。顾名思义,在双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前趋。

               
                                                     
                                         
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 05:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表