线性表 循环链表 双向链表 双向循环链表 复习总结

一、循环链表

循环链表是一种特殊的线性链表

它的最后一个结点的指针域不再是NULL,而是指向头结点

整个链表形成了一个环

二、循环链表的查找、插入和删除

在循环链表中,查找、插入和删除一个结点的操作跟线性链表是基本一致的

差别仅在于:算法中循环的中止条件不再是判断p>next==NULL

而是判断p->next==L(头指针)

三、双向链表

双向链表是一种特殊的线性链表

双向链表中,每个结点包含3项

数据域:数据元素的信息

2个指针域:一个指针指向直接后继(next),另一个指向之前驱(prior)

四、双向循环链表

双向循环链表中,存在着2个环

一个是直接后驱环

一个是直接前驱环

五、双向链表的定义

定义一个双向链表的结点

struct DuLNode

{
int   data;

DuLNode   *prior;

DuLNode    *next;

};

DuLNode *DuLinkList

对于任何一个中间结点,都有p->next->prior==p

                                        都有p->prior->next==p

六、双向链表的插入

双向链表的插入需要改变两个方向的指针

s->next=p;

s->prior=p->prior;

p->prior->next=s;

p->prior=s;

七、双向链表的删除

双向链表的删除也需要改变两个方向的指针

p->prior->next=p->next;

p->next->prior=p->prior;

free(p)

八、基于空间的比较

存储的分配方式

顺序表的存储空间是静态分配的

链表的存储空间是动态分配的

存储密度=结点数据本身所占的存储量/结点结构所占的存储量

顺序表的存储密度=1

链表的存储密度<1

九、基于时间的比较

存取(查找)方式

顺序表中的元素可以随机存取(直接存取)

链表中的元素必须顺序存取(即需要沿着恋查找指定的位置)

插入/删除

时间复杂度是一样的O(n)

顺序表平均需要移动近一半的元素

链表不需要移动元素,只需要修改指针

十、基于应用的比较

顺序表的应用

存储大量数据,并主要用于查找时

用数据库进行学籍管理

链表的应用

存储的元素经常要进行插入和删除操作

大家的网上购物车

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值