0
我正在嘗試在動態循環數組中找到插入前端的公式。我遇到的一個問題是當嘗試運行顯示時,在這種情況下,前兩次插入後的inx將因爲沒有被佔用的索引而關閉。這是假設我正在按照正確的方式選擇開始索引。如何糾正循環陣列插入索引
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",")");
}
}
' 「(」 「),」'應該只是' 「()」' – Barmar
'size == 1'和'size> 1'不需要單獨的情況。具有'while'循環的版本在兩種情況下都可以工作。 – Barmar