0

スキップリストにいくつかの要素を挿入しようとしています

typedef struct skiplist {

struct node * header;
struct node * termnode;

}skiplist;

typedef struct node
{
int key;
entr value;
struct node *next[MaxLevel];
}node;

ノードはキーでソートされます。ただし、前のキーよりも大きなキーを持つノードを挿入しようとすると、セグメンテーション違反が発生し、挿入関数で発生することがわかりました

void insert(list l,int skey,entr newvalue) {
nod update[MaxLevel-1];
for(i=0;i<=MaxLevel-1;i++) {
    update[i]=(nod)malloc(sizeof(struct node));
}

nod x=l->header;
for(i=MaxLevel-1;i>=0;i--) {
    while (x->next[i]->key<skey) {
        x=x->next[i];
    }
    update[i]=x;    
}
x=x->next[0];
if(x->key=skey) x->value=copyvalue(newvalue);
else
{
    int lvl=randl();
    x=makenode(l,lvl,skey,newvalue);
    for(i=0;i<=lvl;i++) {

        x->next[i]=update[i]->next[i];
        update[i]->next[i]=x;
    }
}
printf("\ninserted to list\n");
}   

while (x->next[i]->key<skey)

なぜなら

next[i] 

無効です。なぜこれが起こっているのか理解できません。助けていただければ幸いです

4

0 に答える 0