Даже если у вас много элементов, реализация массива, вероятно, самая быстрая. Для вдохновения я взглянул на деку C ++ в GCC. Он хранит очередь в виде массива массивов. Я не уверен, что итераторы обертываются как в кольцевом буфере. Реализация массива также имеет быстрый произвольный доступ, если он понадобится вам позже.

способом можно быстрее ставить в очередь и убирать из очереди, когда мне нужно вставить очень мало элементов. Является ли массив лучше связанного списка?

Мне нужно вставить несколько элементов, и я должен удалить и прочитать этот удаленный элемент из очереди. Если это массив, мне, возможно, придется изменять индексы каждый раз, когда я удаляю элемент. Вставка и удаление могут происходить одновременно.

Какой из них лучше снизу?

typedef struct{
    mylist list;
    struct mylistQ *next;
}mylistQ;

Код массива

 static mylist myListQ[QUEUESIZE+1];
int qLast = 0;

void enqueue_element(mylist qItem)
{
        myListQ[qLast] = qItem;
    qLast++;
}

mylist dequeue_element()
{
 retryq:
   if(qLast >0) {
    mylist qReturn = myListQ[0];  
    int i;
    for (i = 0; i < qLast - 1; i++){
        myListQ[i] = myListQ[i + 1];
    }
    qLast--; 
    return qReturn;
     }
   else {
    goto retryq;
    }
}

Связанный список

 int qLast = 0;

mylistQ *headElement = NULL;   
mylistQ *tailElement = NULL;     

void enqueue_element(mylist *List)
{
    mylistQ *newnode;      
    newnode=(mylistQ*)av_malloc(sizeof(mylistQ));
    newnode->next=NULL;
    newnode->list=*List;
    qLast++;
    if(headElement==NULL && tailElement==NULL)
    {
        headElement=newnode;
        tailElement=newnode;
    }
    else
    {
        tailElement->next=newnode;
        tailElement=newnode;
    }
 }

mylist dequeue_element()
{
    mylistQ *delnode;      /* Node to be deleted */
    mylist Dellist;
    if(headElement==NULL && tailElement==NULL){
        LOg( "Queue is empty to delete any element");
        }
    else
    {
       Log("In dequeue_picture queue is not empty");
        delnode=headElement;
        headElement=headElement->next;
    if (!headElement){
        tailElement=NULL;
    }
        Dellist = delnode->list;
        av_free(delnode);
    qLast--;
    }
        return Dellist;
}

Ответы на вопрос(3)

Ваш ответ на вопрос