F
Vielen Dank für deine Hilfe.
Ich habe pointer1 uas der Structur rausgenommenund hoffentlich richtig eingerückt
static void CreateListOne(freq_t *val, int i, int m);
static int Distance(freq_t *val1,freq_t *val2, int i, int m);
static int bit (int wert, int pos);
freq_t *pointer1;
void Insert(freq_t *val, int i, int m)
{
if(Set[m].Tables[i].init==NULL)
CreateListOne(val, i, m);
else{
Set[m].Tables[i].pointer=Set[m].Tables[i].init;
while(Set[m].Tables[i].pointer != NULL)
Set[m].Tables[i].pointer=Set[m].Tables[i].pointer->next;
if(Set[m].Tables[i].pointer==NULL)
CreateListOne(val, i ,m);
else if(Set[m].Tables[i].pointer == Set[m].Tables[i].init) {
Set[m].Tables[i].init=(freq_t*)malloc(sizeof(freq_t));
if(NULL == Set[m].Tables[i].init)
{
fprintf(stderr, "Kein Speicherplatz vorhanden!!!\n");
return;
}
Set[m].Tables[i].init->instr = val->instr;
Set[m].Tables[i].init->frequency = val->frequency;
Set[m].Tables[i].init->pos = val->pos;
Set[m].Tables[i].init->next=Set[1].Tables[i].pointer;
Set[m].Tables[i].prev->next=NULL;
}else{
pointer1=Set[1].Tables[i].init;
while(pointer1->next!= Set[m].Tables[i].pointer)
pointer1=pointer1->next;
Set[m].Tables[i].pointer=(freq_t *)malloc(sizeof(freq_t));
if(NULL == Set[m].Tables[i].pointer) {
fprintf(stderr, "Kein Speicherplatz vorhanden!!!\n");
return;
}
Set[m].Tables[i].pointer->instr = val->instr;
Set[m].Tables[i].pointer->frequency = val->frequency;
Set[m].Tables[i].pointer->pos = val->pos;
Set[m].Tables[i].pointer->next=pointer1->next;
Set[m].Tables[i].pointer->prev=pointer1;
pointer1->next->prev=Set[1].Tables[i].pointer;
}
}
}
void CreateListOne(freq_t *val, int i, int m){
int k;
if(Set[m].Tables[i].init == NULL)
{
if((Set[m].Tables[i].init = ( freq_t *) malloc(sizeof( freq_t))) == NULL)
{
fprintf(stderr, "No mamory is for init\n");
return;
}
Set[m].Tables[i].init->instr = val->instr;
Set[m].Tables[i].init->frequency =val->frequency;
Set[m].Tables[i].init->pos =val->pos;
Set[m].Tables[i].init->select =val->select;
for ( k =1; k <= blocksize; k++)
{
Set[m].Tables[i].init->str[blocksize-k]= val->str[blocksize-k];
Set[m].Tables[i].init->posstr[blocksize-k]= val->posstr[blocksize-k];
}
Set[m].Tables[i].init->next = NULL;
Set[m].Tables[i].last = Set[m].Tables[i].init;
Set[m].Tables[i].last->prev =NULL;
Set[m].Tables[i].entries = Set[1].Tables[i].entries+1;
}else{
Set[m].Tables[i].pointer=Set[m].Tables[i].init;
while(Set[m].Tables[i].pointer->next != NULL)
Set[m].Tables[i].pointer = Set[m].Tables[i].pointer->next;
if((Set[m].Tables[i].pointer->next =(freq_t *)
malloc(sizeof(freq_t))) == NULL)
{
fprintf(stderr,"Kein Speicherplatz für das letzte Element\n");
return;
}
pointer1=Set[m].Tables[i].pointer;
Set[m].Tables[i].pointer=Set[m].Tables[i].pointer->next;
Set[m].Tables[i].pointer->instr = val->instr;
Set[m].Tables[i].pointer->frequency =val->frequency;
Set[m].Tables[i].pointer->pos =val->pos;
Set[m].Tables[i].pointer->next=NULL;
Set[m].Tables[i].last = Set[m].Tables[i].pointer;
Set[m].Tables[i].pointer->prev =pointer1;
pointer1->next= Set[m].Tables[i].pointer;
}
}
static int Distance(freq_t *val1, freq_t *val2, int i, int m);
int i =0;
int res = 0;
int test ;
int *dx = val1->instr;
int *dy = val2->instr;
test = (dx ^ dy);
for ( i =0; i < blocksize; i++)
{
if (bit(test, i)==1) res++;
}
return res;
}
static int bit (int wert, int pos){
wert >>= pos;
return (wert & 1);
}