双链式存储结构讲解
Ⅰ 双向循环链表的概念
本课主题: 循环链表与双腔拿向链表
教学目的: 掌握循环链表的概念,掌握双向链表的的表示与实现
教学重点: 双向链表的表示与实现
教学难点: 双向链表的存储表示
授课内容:
一、复习线性链表的存储结构
二、循环链表的存储结构
循环链表是加一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点。
循环链表的操作和线性链表基本一致,差别仅在于算法中的循环条件不是p或p->next是否为空,而是它们是否等于头指针。
三、双向链表的存储结构
提问:单向链表的缺点是什么?
提示:如何寻找结点的直接前趋。
双向链表可以拍圆慧克服单链表的单向性的缺点。
在双向链表的结点中有两个指针域,其一指向直接袭答后继,另一指向直接前趋。
1、线性表的双向链表存储结构
typedef struct DulNode{
struct DulNode *prior;
ElemType data;
struct DulNode *next;
}DulNode,*DuLinkList;
对指向双向链表任一结点的指针d,有下面的关系:
d->next->priou=d->priou->next=d
即:当前结点后继的前趋是自身,当前结点前趋的后继也是自身。
2、双向链表的删除操作
Status ListDelete_DuL(DuLinkList &L,int i,ElemType &e){
if(!(p=GetElemP_DuL(L,i)))
return ERROR;
e=p->data;
p->prior->next=p->next;
p->next->prior=p->pror;
free(p);
return OK;
}//ListDelete_DuL
3、双向链表的插入操作
Status ListInsert_DuL(DuLinkList &L,int i,ElemType &e){
if(!(p=GetElemP_DuL(L,i)))
return ERROR;
if(!(s=(DuLinkList)malloc(sizeof(DuLNode)))) return ERROR;
s->data=e;
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
return OK;
}//ListInsert_DuL
Ⅱ 简述区块链的定义详解
区块链是一种独特的共识记录,分布在多个网络节点上,用于安全、可靠地存储和验证信息。
一、区块链的基本定义
区块链本质上是一个不断增长的记录列表,由一系列按照时间顺序排列的数据块组成,并采用密码学方式保证的不可篡改和不可伪造。每个数据块包含了一些有效的记录或交易,以及与前一个数据块的链接(即散列值)。这种设计使得数据一旦写入,就无法被更改或删除,从而保证了数据的完整性和安全性。
二、区块链的工作原理
- 数据存储:每个区块存储有效的记录或交易,以及涉及该块的信息。
- 链式结构:通过每个区块的散列值链接到前一个区块和下一个区块,形成链式结构。
- 验证与添加:新记录首先由网络节点验证,然后添加到链接到链的新块中。
三、区块链的安全性
- 分布式存储:每个网络节点都存储链的精确副本,保证了信息的可用性。
- 难以篡改:由于每条记录都是双方同意的,并且所有节点都包含相同的信息,因此几乎不可能改变它。攻击者需要修改至少51%的节点中的整个链,这在现实中几乎不可能实现。
- 数学链接:每个块在数学上链接到下一个块,一旦将新块添加到链中,它就会呈现为不可更改。
四、区块链的应用
- 金融领域:区块链技术最初与比特币等加密货币相关,但其在金融领域的应用远不止于此。例如,它可以用于创建智能合约,自动执行合同条款,降低交易成本和风险。
- 物联网:在物联网市场中,区块链可以使设备直接、安全、可靠地通过网络进行通信,而无需中间人,从而解决集中式模型无法支持大量设备以及设备安全性不足的问题。
- 医疗保健:区块链可以用于存储患者的健康记录,确保病史的安全性和可用性。同时,它还可以帮助制药行业验证药品并防止伪造。
- 文档管理:区块链允许记录购买、契约、文档或任何其他类型的在线资产,而不会被伪造,从而解决数字化带来的复制问题。
五、区块链的未来展望
随着技术的不断发展,区块链的应用领域将会越来越广泛。目前,已经有许多大公司开始投资并开发基于区块链的解决方案。可以预见的是,区块链将会成为未来互联网的重要组成部分,为人们的生活和工作带来更多的便利和安全。