Ich versuche, eine Formel für das Einfügen von Front in einem dynamischen kreisförmigen Array zu finden. Ein Problem, das ich habe, ist, wenn ich versuche, die Anzeige zu starten. In diesem Fall ist der Inx nach den ersten beiden Einfügungen ausgeschaltet, weil ein unbesetzter Index vorhanden ist. Dies setzt voraus, dass ich die richtige Wahl des Startindex befolge.Wie Index in kreisförmigen Array-Einfügung korrigieren
void insertCDAfront(CDA *items,void *val){//insert in the slot prior t
assert(items->array!=0);
if(sizeCDA(items)==0){
items->array[items->start]=val;
items->size++;
}
else{
if(items->size==items->capacity){
items->capacity=items->capacity*items->factor;
void **arr=calloc(items->capacity,sizeof(void *));
assert(arr!=0);
for(int i=0;i<items->size;i++){
arr[i]=getCDA(items,i);
}
items->array=arr;
items->start=0;
}
items->start=(items->start-1+items->capacity)%items->capacity;
items->array[items->start]=val;
items->start=0;
items->size++;
}
}
void *getCDA(CDA *items,int index){//
assert (index<items->size&&index>=0);
int spot=(items->start+index+items->capacity)%items->capacity;
return items->array[spot];
}
void displayCDA(FILE *f,CDA *items){
int i=0;
if (items->size==0){
fprintf(f,"("")");
}
else if (items->size==1){
fprintf(f,"(");
items->display(f,items->array[i]);
fprintf(f,")");
}
else{
fprintf(f,"%s","(");
while (i!=items->size-1){ //i!=end
items->display(f,getCDA(items,i));
fprintf(f,"%s",",");
i++;
}
items->display(f,getCDA(items,i));
fprintf(f,"%s",")");
}
}
' "(" ")"' sollte gerade sein ' "()"' – Barmar
Für "size == 1" und "size> 1" sind keine separaten Fälle erforderlich. Die Version mit der while-Schleife funktioniert in beiden Fällen. – Barmar