人们对区块链的认识开始变得深入和完善,另一条新路径开始衍生

  当区块链行业的发展进入到深水区特别是当有关区块链的狂热与躁动开始退场仅仅只是主打区块链的概念而没有找到区块链与现实商业联通的方式和方法依然成为困扰区块链发展的一大症结。
  事实上从区块链被人们认识的第一天开始我们始终都没有找到它和现实商业联通的方式和方法。
  无论是以数字货币为主导的发币狂潮还是以“区块链+”为主导的概念巨浪其实都没有找到区块链与现实商业联通的方式和方法。
  困扰区块链的这样一种发展困境所导致的一个必然结果便是区块链仅仅只是一个以资本为主导的存在区块链仅仅只是一个靠外部输血才能运行的存在而无法真正成为一个独立行走的存在。
  于是,当区块链没有了外部的“营养液”我们便看到了它的热度的减退它的神话的破灭。
  一
  然而,这丝毫无法抵消区块链是一种全新的技术一种全新的思想一种全新的商业模式的现实。
  当我们对于区块链的认识开始变得深入和完善特别是当数实融合的大趋势变得愈发明显我们开始看到另外一条有关区块链的新路径开始衍生和出现。
  正是这样一条新路径开始真正将区块链的发展带离以往浮夸且不切实际的发展阶段真正进入到回归商业融合商业,以商业展示自我价值的新阶段。
  如果对区块链进行一个确切的定义的话它更多地表现出来的是一种全新的数据传输技术它摆脱了以往以中心和平台为主导的数据传输模式,真正将数据传输模式带入到了点对点传输的新阶段。
  同样地,如果我们对数实融合的发展模式进行总结和定义的话它同样是一种全新的数据传输模式。
  在数实融合的模式下不仅传统意义上的平台内部的数据实现了点对点传输平台与平台之间的数据同样实现了点对点传输而且以平台为代表的虚拟经济体的数据和以实体产业为代表的实体经济体的数据同样也实现了点对点传输。
  只有这样,我们才能实现真正意义上的数实融合,只有这样,我们才能实现行业的嬗变,只有这样,我们才能实现产业的迭代和升级。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是基于模板的双向循环链表的实现,每个节点可以衍生一条双向循环链表,并加上详细的注释。 ```c++ #include <iostream> using namespace std; // 定义双向循环链表节点 template<typename T> struct ListNode{ T data; // 数据域 ListNode<T>* prev; // 前驱指针 ListNode<T>* next; // 后继指针 ListNode<T>* sublist; // 子列表指针 }; // 双向循环链表类 template<typename T> class DoublyLinkedList{ private: ListNode<T>* head; // 头指针 int length; // 链表长度 public: // 构造函数 DoublyLinkedList(){ head = new ListNode<T>; // 创建一个头节点 head->prev = head; // 头节点的前驱指向自己 head->next = head; // 头节点的后继指向自己 head->sublist = nullptr; // 头节点的子列表指向空 length = 0; // 链表长度初始化为0 } // 析构函数 ~DoublyLinkedList(){ ListNode<T>* p = head; ListNode<T>* q = nullptr; while(p != nullptr){ // 循环删除每个节点 q = p->next; delete p; p = q; } head = nullptr; length = 0; } // 获取链表长度 int getLength(){ return length; } // 在链表末尾添加一个节点 void addNode(T data){ ListNode<T>* p = head->prev; // 找到尾节点 ListNode<T>* q = new ListNode<T>; // 创建节点 q->data = data; // 初始化节点数据 q->prev = p; // 节点的前驱指向尾节点 q->next = head; // 节点的后继指向头节点 q->sublist = nullptr; // 节点的子列表指向空 p->next = q; // 尾节点的后继指向节点 head->prev = q; // 头节点的前驱指向节点 length++; // 链表长度加1 } // 删除链表中第一个值为data的节点 bool deleteNode(T data){ ListNode<T>* p = head->next; // 从头节点开始遍历 while(p != head){ if(p->data == data){ // 找到要删除的节点 p->prev->next = p->next; // 修改前驱节点的后继指向 p->next->prev = p->prev; // 修改后继节点的前驱指向 delete p; // 释放节点内存 length--; // 链表长度减1 return true; } p = p->next; // 继续向后遍历 } return false; // 没有找到要删除的节点 } // 在链表中查找第一个值为data的节点 ListNode<T>* findNode(T data){ ListNode<T>* p = head->next; // 从头节点开始遍历 while(p != head){ if(p->data == data){ // 找到要查找的节点 return p; } p = p->next; // 继续向后遍历 } return nullptr; // 没有找到要查找的节点 } // 在节点p处插入一个值为data的节点 bool insertNode(ListNode<T>* p, T data){ if(p == nullptr){ // 插入位置非法 return false; } ListNode<T>* q = new ListNode<T>; // 创建节点 q->data = data; // 初始化节点数据 q->prev = p->prev; // 节点的前驱指向p的前驱 q->next = p; // 节点的后继指向p q->sublist = nullptr; // 节点的子列表指向空 p->prev->next = q; // p的前驱节点的后继指向节点 p->prev = q; // p的前驱指向节点 length++; // 链表长度加1 return true; } // 衍生出一个的双向循环链表 DoublyLinkedList<T>* derivative(ListNode<T>* p){ DoublyLinkedList<T>* sublist = new DoublyLinkedList<T>; // 创建的双向循环链表 if(p != nullptr && p->sublist == nullptr){ // p节点存在且没有子列表 p->sublist = sublist->head; // 在p节点处记录子列表 return sublist; // 返回的双向循环链表 } return nullptr; // 衍生失败 } // 打印链表中所有节点的数据 void printList(){ ListNode<T>* p = head->next; // 从头节点开始遍历 while(p != head){ cout << p->data << " "; p = p->next; // 继续向后遍历 } cout << endl; } // 打印节点p的子列表中所有节点的数据 void printSublist(ListNode<T>* p){ if(p != nullptr && p->sublist != nullptr){ // p节点存在且有子列表 DoublyLinkedList<T>* sublist = (DoublyLinkedList<T>*)(p->sublist); // 获取子列表的指针 sublist->printList(); // 打印子列表中所有节点的数据 } } }; int main(){ // 创建双向循环链表 DoublyLinkedList<int> list; list.addNode(1); list.addNode(2); list.addNode(3); list.addNode(4); list.addNode(5); // 打印链表中所有节点的数据 cout << "list: "; list.printList(); // 在链表中查找第一个值为3的节点 ListNode<int>* p = list.findNode(3); if(p != nullptr){ // 在节点p处插入一个值为6的节点 list.insertNode(p, 6); // 打印链表中所有节点的数据 cout << "list after insert: "; list.printList(); } // 在节点p处衍生出一个的双向循环链表 DoublyLinkedList<int>* sublist = list.derivative(p); if(sublist != nullptr){ // 在子列表中添加节点 sublist->addNode(7); sublist->addNode(8); // 打印链表中所有节点的数据 cout << "list with sublist: "; list.printList(); // 打印节点p的子列表中所有节点的数据 cout << "sublist of p: "; list.printSublist(p); } // 删除链表中第一个值为4的节点 list.deleteNode(4); // 打印链表中所有节点的数据 cout << "list after delete: "; list.printList(); return 0; } ``` 注:上述代码中的衍生操作可以用指针实现,不需要使用额外的空间来记录子列表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值