实现基于异或的双链表

这篇博客探讨了基于异或操作的双链表数据结构,虽然它能减少存储需求,但由于调试困难、代码复杂度增加、不适用于某些语言和垃圾回收机制,以及在实际应用中的局限性,如遍历和链表操作不便,使得这种方式在实践中并不常见。文章提到了异或链表在嵌入式系统以外的应用场景中并不那么重要,并提供了相关的实现源码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码均在XP系统,VS2008下编译并运行

数据结构,利用计算机的位异或操作,降低双向链表的存储需求。但实际中不推荐使用,主要以下原因:
2.1 常用的debug工具不支持xor的链表,使得debug更加麻烦。
2.2 通过增加代码的复杂度来降低内存开销,增加了维护的成本。
2.3 通常的垃圾回收机制对于这种表示无法工作。
2.4 尽管大部分语言支持,但是还是有一些语言不支持xor操作。
2.5 没有遍历链表的时候,指针式毫无意义的,比如另外的数据结构也包含了链表中的指针。
2.6 遍历链表时,为了计算下个指针的地址,你需要记住前一个节点的地址。
2.7 xor链表也无法提供双向链表的一些功能。比如仅仅知道一个节点将该节点从链表移除或者在仅仅知道一个节点时再该节点后面插入一个节点。
2.8 随着资源越来越便宜,内存越来越大,除了在一些嵌入式系统中,内存将不再是一个非常重要的因素。
参考:http://en.wikipedia.org/wiki/XOR_linked_list

附上实现源码

#include "stdafx.h"
#include <stdlib.h>

#define LEFT 0
#define RIGHT 1
#define ERROR 0
#define OK 1
#define Status int 

// 定义节点
typedef struct XorNode
{
    // 数据域
    char data;
    // 指针域
    struct XorNode *LPPtr;
} XorNode,*XorPointer;


// 无头节点的异或指针双向链表
typedef struct {
    // 分别指向链表的左端和右端
    XorPointer Left,Right;
} XorLinkedList;

XorPointer XorP(XorPointer p,XorPointer q);

// 打印异或链表
void PrintXorList(XorLinkedList A,int direction);

// 插入
Status InstertXorList(XorLinkedList &
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值