双向链表——单链表改进之二 在单链表中,我们可以通过next指针使得查找下一个结点的时间复杂度为O(1)。但如果我们想访问上一个结点,则最坏的时间复杂度为O(n),因为我们需要从头开始遍历查找。因此,产生了双向链表。双向链表是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。所以在双向链表中的结点都有两个指针域,一个指向直接后继,一个指向直接前驱。下面是双向链表的结构示意图。 有关双向链表,我们
循环链表——单链表的改进之一 对于单链表,由于每个结点只存储了向后的指针,到了尾标志就停止了向后链的操作,如此一来,链表中的结点就无法访问它的前驱(除非从头开始访问)。将单链表中终端结点的指针由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表。其实循环链表和单链表的主要区别在于循环的判断条件上,由p->next是否为空改为p->next是否等于头结点,等于头结点则循环结束。
基于链式存储结构的线性表 用链式存储结构存储的线性表,叫做链表。链式结构中每个结点除了数据域还有一个或一个以上的指针域,数据域用来存储数据元素,指针域用来构造数据元素之间的逻辑关系。 根据数据域的不同和结点构造链的方法不同,线性链表主要有单链表、双向链表、循环链表等。当然自然可以存在单向循环链表,双向循环链表等。这些链表结构中,每一种又分为带头结点和不带头结点两种。其中带头节点的结构更为常见。下面一张图可以
基于顺序存储结构的线性表 线性表是由n个性质相同的数据元素组成的有限序列,记为(a1,a2,.......)。表中数据元素的个数n就是线性表的长度。此外,n为0时的表称为空表,即该表不含任何数据元素。线性表有两类存储结构,顺序表和链表。本文主要讲解顺序表的一些操作,链表详看下一篇博文。 顺序表是用一组连续的存储单元依次存放线性表的数据元素,并以元素在计算机的物理位置相邻来表示线性表中数据元素之间的逻辑关系,说白了,在C语言中就是一维数组。本文将对顺序表进行一些常用算法操作。