现在的位置: 首页 > 综合 > 正文

线性表的链式存储

2013年04月07日 ⁄ 综合 ⁄ 共 940字 ⁄ 字号 评论关闭

 线性链表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机快速的存取表中任一个元素

 线性表的链式存储结果的特点是用一组任意的存储单元来存储线性表的数据元素,具有链式存储结果的线性表称为线性链表。节点包裹两个域,其中存储数据元素信息的域称为数据域(data field),存放直接后继节点或前驱节点地址的域称为指针域(link field)。

链表中每个节点可以包含若干个数据域和若干个指针域,

  在线性链表中,如果每个节点中只包含一个指针域,称其为单链表,

访问链表的任何节点必须从链表的头指针开始进行,头指针指示链表中第一个结点的存储位置,由于最后一个数据元素没有直接后继,则线性链表中最后一个结点的指针为空,用“NULL”表示。头指针名字,如头指针L,则把链表称为L。

 

 

指针为数据元素之间的逻辑关系的映像,则逻辑上相邻的两个数据元素其存储的物理位置不要求相邻,由此,这种存储结构为非顺序映像或链式映像,

 

建立一个单链表首先生成一个空链表

 

带头结点的空单链表:

 

   Initlist (LinkList *L)

{

      L=(LinkList*)malloc (sizeof (Lnode));

      L->next=NULL;

}

生成一个空链表后,开辟新的存储单元,读入结点值,指针域为空。将新节点添加到链表中,重复以上操作。在表中逐一添加新结点。

 

建立单链表的算法

 

 

Create-L(LinkList * L,int n)

/*从表尾到表头输入n个元素的值,建立带表头结点的单链线性表

{

      LinkList *p;int;

     Initlist(L);

     for(i=n;i>0;--i)

      {

         p=(LinkList *)malloc(sizeof(Lnode));

        scanf(&p->data);

       p->next=L-next;

      L-next=p;

        }

}

由于开始结点的位置被存放在头结点指针域中,所以在链表的第一个位置的操作就和在表的其他位置上的操作一致,无需再进行特殊处理。

无论链表是否为空,其头指针是指向头结点的非空指针(空表中头结点的指针域为空,)因此空表和非空表的处理也就统一了。

抱歉!评论已关闭.