在键xor链表后插入

时间:2018-03-27 19:23:31

标签: c linked-list xor

我需要在xor链表中实现插入后插入但我有问题而且我找不到任何解决方案,插入不能很好但插入第一个工作正常。

示例:

list = 1 2 3 4 5

insertafk(列表,2,99)

结果= 1,2,99,并且一些随机值不是3,4,5,插入有效但我没有新键后的正确元素,我有随机元素

xorlist.h

typedef struct nodetype4
{
    int key;
    struct nodetype4* np;
}XorNode;

typedef struct
{
    XorNode* first;
    XorNode* last;
}xlist;

XorNode* XOR(XorNode* a, XorNode* b);
void initXor(xlist* x);
void insertf(xlist* x,int k);
void afisxor(xlist* x);
void insertafk(xlist* x,int akey,int k);

xorlist.c

 #include <stdio.h>
 #include <stdlib.h>
 #include "xorlist.h"

XorNode* XOR(XorNode* a, XorNode* b)
{
    return (XorNode*)((unsigned int)a ^ (unsigned int)b);
}
void initXor(xlist* x)
{
    x->first=NULL;
    x->last=NULL;
}
void insertf(xlist* x,int k)
{
    XorNode* p=malloc(sizeof(XorNode));
    XorNode* fnext;
    p->key=k;
    if(x->first==NULL)
    {
        p->np=NULL;
        x->first=p;
        x->last=p;
    }
    else
    {
        p->np=XOR(x->first,NULL);
        fnext=XOR(x->first->np,NULL);
        (x->first)->np=XOR(p,fnext);
        x->first=p;
    }

}

void insertafk(xlist* x,int akey,int k)
{
    XorNode* p=malloc(sizeof(XorNode));
    p->key=k;

    XorNode* curr;
    curr=x->first;
    XorNode* prev=NULL;
    XorNode* next=XOR(NULL,curr->np);

    //Cautam nodul cu cheia akey
    while(curr!=NULL)
    {
        if(curr->key==akey)
            break;
        prev=curr;
        curr=next;
        next=XOR(curr->np,prev);

    }

    //Inserare cheie dupa nodul gasit
    if(curr==NULL)
        printf("Nu s-a gasit cheia");
    else
    {
        p->np=XOR(curr,next);
        curr->np=XOR(prev,p);
        next->np=XOR(p,curr);

    }
}
//print list
void afisxor(xlist* x)
{
    XorNode* curr;
    XorNode* prev;
    XorNode* next;
    curr=x->first;
    prev=NULL;
    while(curr!=NULL)
    {
        printf("%d ",curr->key);
        next=XOR(curr->np,prev);
        prev=curr;
        curr=next;
    }
    printf("\n");
}

的main.c

#include <stdio.h>
#include <stdlib.h>
#include "xorlist.h"

int main()
{

    printf("For xor list:\n");
    xlist* x;
    initXor(&x);
    insertf(&x,1);
    insertf(&x,2);
    insertf(&x,3);
    insertl(&x,10);
    insertl(&x,13);
    afisxor(&x);
    insertafk(&x,2,20);
    afisxor(&x);

    return 0;
}

the result after insert

0 个答案:

没有答案