数据结构基础讲解(三)——线性表之循环链表专项练习

本文数据结构讲解参考书目:

通过网盘分享的文件:数据结构  C语言版.pdf
链接: https://pan.baidu.com/s/159y_QTbXqpMhNCNP_Fls9g?pwd=ze8e 提取码: ze8e

数据结构基础讲解(二)——线性表之单链表专项练习-CSDN博客 

个人主页:樱娆π-CSDN博客

目录

循环链表

双向链表

1.双向链表的插入

【算法描述】

2.双向链表的删除

【算法描述】

顺序表和链表的比较

1.空问性能的比较

时间性能的比较

(1)存取元素的效率

(2)插入和删除操作的效率

实战练习

1.学生成绩管理系统

2.约瑟夫环问题

3.查找线性表中最大值或最小值

4.线性表的排序

 总结

线性表的特点:

线性表的常见操作:

线性表的实现方式:


循环链表

       循环链表(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)存储空间的分配
       顺序表的存储空间必须预先分配,元素个数扩充受一定限制,易造成存储空间浪费或空间溢
出现象;而链表不需要为其预先分配空间, 只要内存空间允许,链表中的元素个数就没有限制。
基于此,当线性表的长度变化较大,难以预估存储规模时,宜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樱娆^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值