
本文数据结构讲解参考书目:
通过网盘分享的文件:数据结构 C语言版.pdf
链接: https://pan.baidu.com/s/159y_QTbXqpMhNCNP_Fls9g?pwd=ze8e 提取码: ze8e
数据结构基础讲解(二)——线性表之单链表专项练习-CSDN博客
个人主页:樱娆π-CSDN博客
目录
循环链表
循环链表(CircularLinked List)是另一种形式的链式存储结构。其特点是表中最后一个结点
的指针域指向头结点,整个链表形成一个环。由此,从表中任一结点出发均可找到表中其他结点,
所示为单链的循环链表。类似地,还可以有多重链的循环链表。

循环单链表的操作和单链表基本一致,差别仅在于:当链表遍历时,判别当前指针p是否
指向表尾结点的终止条件不同。在单链表中,判别条件为p!=NULL或p->next!=NULL,而循环
单链表的判别条件为p!=L或p->next!=L。
双向链表
在单链表中,查找直接后继结点的执行时间为 O(1), 而查找直接前驱的执行时间为O(n)。 为克服
单链表这种单向性的缺点,可利用双向链表 (Double Linked List)。
在双向链表的结点中有两个指针域, 一个指向直接后继, 另 一个指向直接前驱,
/:- - - - -双向链表的存储结构- - - - -
typedef struct DuLNode
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode,*DuLinkList;

1.双向链表的插入
【算法描述】
Status Listinsert_DuL(DuLinkList &L,int i,ElemType e)
{//在带头结点的双向链表1中第l.个位置之前插入元素e
if (1 (p=GetElem_DuL(L,i)))
return ERROR;
s=new DuLNode;
s->data=e;
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
return OK;
}
2.双向链表的删除
【算法描述】
Status ListDelete_DuL(DuLinkList &L,int i)
{//删除带头结点的双向链表1中的第1个元素
if (! (p=GetElem_DuL(L,i)))
return ERROR;
p->prior->next=p->next;
p->next->prior=p->prior;
delete p;
return OK;
}
顺序表和链表的比较
1.空问性能的比较
(1)存储空间的分配
顺序表的存储空间必须预先分配,元素个数扩充受一定限制,易造成存储空间浪费或空间溢
出现象;而链表不需要为其预先分配空间, 只要内存空间允许,链表中的元素个数就没有限制。
基于此,当线性表的长度变化较大,难以预估存储规模时,宜

最低0.47元/天 解锁文章
1538

被折叠的 条评论
为什么被折叠?



