源码均在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 &