• XOR linked list


    XOR linked list 是为了解决双向链表两个指针占用空间的问题

    XOR:异或,数学符号 “^”

    XOR linked list 是将节点的previous 和 next 通过XOR算出结果保存在 npx(变量,起什么名字都无所谓)。这样就可以节省一个指针的空间,若果需要previous,previous = npx ^ next;

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<inttypes.h>
     4 
     5 struct node{
     6     int data;
     7     struct node * npx;
     8 };
     9 
    10 struct node * XOR(struct node * pre, struct node * next)
    11 {
    12     return (struct node *)((uintptr_t)(pre) ^ (uintptr_t)(next));
    13 }
    14 
    15 void insert(struct node ** head_ref, int data)
    16 {
    17     struct node * new_node = (struct node *)malloc(sizeof(struct node));
    18     new_node->data = data;
    19     new_node->npx = XOR(NULL, (*head_ref));
    20 
    21     if(NULL != (*head_ref))
    22     {
    23         struct node * next = XOR(NULL, (*head_ref)->npx);
    24         (*head_ref)->npx = XOR(new_node, next);
    25     }
    26 
    27     (*head_ref) = new_node;
    28 }
    29 void printXORlinkedlist(struct node * head_ref)
    30 {
    31     struct node * current = head_ref;
    32     struct node * pre = NULL;
    33     struct node * next;
    34 
    35     while(NULL != current)
    36     {
    37         printf("%d  ", current->data);
    38 
    39         next = XOR(current->npx, pre);
    40 
    41         pre = current;
    42         current = next;
    43     }
    44 }
    45 int main(void)
    46 {
    47     struct node * head = NULL;
    48 
    49     insert(&head, 0);
    50     insert(&head, 1);
    51     insert(&head, 2);
    52     insert(&head, 3);
    53 
    54     printXORlinkedlist(head);
    55     return 0;
    56 }

    岁月如歌须静听

  • 相关阅读:
    Dubbo 安装监控中心
    Docker安装RabbitMQ
    Python 3 字符串转MD5形式
    Ubuntu 安装jupyter notebook
    设计模式学习-合成模式
    ubuntu 下安装jupyter
    使用物理备份恢复数据库
    matplotlib 中的subplot的用法
    pandas中关于DataFrame的groupby方法,如何取出分组的ID(行名称)和ID对应的个数
    java编程中'为了性能'一些尽量做到的地方
  • 原文地址:https://www.cnblogs.com/AI-Cobe/p/9348595.html
Copyright © 2020-2023  润新知