三维十字链表AOI算法

#include <iostream>

using namespace std;

const int inf = (1 << 31) - 1;

struct Node{
    int x, y, z;

    Node* xPre;
    Node* xNext;

    Node* yPre;
    Node* yNext;

    Node* zPre;
    Node* zNext;

    Node(int _x, int _y, int _z){
        this->x = _x;
        this->y = _y;
        this->z = _z;
        xPre = yPre = zPre = NULL;
        xNext = yNext = zNext = NULL;
    }
};

class AOI{
    Node* head;
    Node* tail;
    AOI(){
        head = new Node(-inf, -inf, -inf);
        tail = new Node(inf, inf, inf);
    }
    ~AOI(){
        Node *cur = head;
        while(cur != NULL){
            cur = cur->xNext;
            delete cur->xPre;
        }
    }
public:
    Node* addNode(int x, int y, int z){
        Node* newNode = new Node(x, y, z);
        Node* curNode = head->xNext;
        while(curNode != NULL){
            if(newNode->x < curNode->x){
                curNode->xPre->xNext = newNode;
                newNode->xPre = curNode->xPre;

                newNode->xNext = curNode;
                curNode->xPre = newNode;
                break;
            }
            curNode = curNode->xNext;
        }
        curNode = head->yNext;
        while(curNode != NULL){
            if(newNode->y < curNode->y){
                curNode->yPre->yNext = newNode;
                newNode->yPre = curNode->yPre;

                newNode->yNext = curNode;
                curNode->yPre = newNode;
                break;
            }
            curNode = curNode->yNext;
        }
        curNode = head->zNext;
        while(curNode != NULL){
            if(newNode->z < curNode->z){
                curNode->zPre->zNext = newNode;
                newNode->zPre = curNode->zPre;

                newNode->zNext = curNode;
                curNode->zPre = newNode;
                break;
            }
            curNode = curNode->zNext;
        }
    }
    void leaveNode(Node* node){
        node->xPre->xNext = node->xNext;
        node->xNext->xPre = node->xPre;
        node->yPre->yNext = node->yNext;
        node->yNext->yPre = node->yPre;
        node->zPre->zNext = node->zNext;
        node->zNext->zPre = node->zPre;
        delete node;
    }
    void moveNode(Node* node, int x, int y, int z){
        leaveNode(node);
        node = addNode(x, y, z);
    }
};

int main()
{
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

achonor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值