Подскажите, как реализовать двустороннюю очередь (Дек) в СИ Какие аргументы необходимо передать в функции добавления элемента в начало дека и добавления элемента в конец дека Какие аргументы необходимо передать в функции извлечения элемента из начала дека и извлечения элемента из конца дека Как выглядят эти функции? (словесное описание)
Двусторонняя очередь (дек) в C может быть реализована с использованием массива или связанного списка.
Для добавления элемента в начало дека необходимо передать указатель на дек и значение элемента, который мы хотим добавить. Функция добавления в начало дека может выглядеть примерно так:
void addFront(int *deque, int *front, int *rear, int value) if ((*front == 0 && *rear == SIZE - 1) || (*rear == (*front - 1) % (SIZE - 1))) printf("Deque is full\n") return } if (*front == -1) *front = *rear = 0 } else if (*front == 0) *front = SIZE - 1 } else *front = (*front - 1) % (SIZE - 1)
deque[*front] = value }
Для добавления элемента в конец дека аргументы будут такими же - указатель на дек и значение элемента. Функция добавления в конец дека будет выглядеть примерно так:
void addRear(int *deque, int *front, int *rear, int value) if ((*front == 0 && *rear == SIZE - 1) || (*rear == (*front - 1) % (SIZE - 1))) printf("Deque is full\n") return } if (*front == -1) *front = *rear = 0 } else if (*rear == SIZE - 1) *rear = 0 } else *rear = (*rear + 1) % (SIZE - 1)
deque[*rear] = value }
Для извлечения элемента из начала дека необходимо передать указатель на дек. Функция извлечения элемента из начала дека может выглядеть примерно так:
int deleteFront(int *deque, int *front, int *rear) if (*front == -1) printf("Deque is empty\n") return -1
int value = deque[*front] if (*front == *rear) *front = *rear = -1 } else *front = (*front + 1) % SIZE
return value }
Для извлечения элемента из конца дека также необходимо передать указатель на дек. Функция извлечения элемента из конца дека может выглядеть примерно так:
int deleteRear(int *deque, int *front, int *rear) if (*front == -1) printf("Deque is empty\n") return -1
int value = deque[*rear] if (*front == *rear) *front = *rear = -1 } else if (*rear == 0) *rear = SIZE - 1 } else *rear = (*rear - 1) % SIZE
return value }
Эти функции позволяют добавлять элементы в начало и конец дека, а также удалять элементы из начала и конца дека.
Двусторонняя очередь (дек) в C может быть реализована с использованием массива или связанного списка.
Для добавления элемента в начало дека необходимо передать указатель на дек и значение элемента, который мы хотим добавить. Функция добавления в начало дека может выглядеть примерно так:
void addFront(int *deque, int *front, int *rear, int value)if ((*front == 0 && *rear == SIZE - 1) || (*rear == (*front - 1) % (SIZE - 1)))
printf("Deque is full\n")
return
}
if (*front == -1)
*front = *rear = 0
} else if (*front == 0)
*front = SIZE - 1
} else
*front = (*front - 1) % (SIZE - 1)
deque[*front] = value
}
Для добавления элемента в конец дека аргументы будут такими же - указатель на дек и значение элемента. Функция добавления в конец дека будет выглядеть примерно так:
void addRear(int *deque, int *front, int *rear, int value)if ((*front == 0 && *rear == SIZE - 1) || (*rear == (*front - 1) % (SIZE - 1)))
printf("Deque is full\n")
return
}
if (*front == -1)
*front = *rear = 0
} else if (*rear == SIZE - 1)
*rear = 0
} else
*rear = (*rear + 1) % (SIZE - 1)
deque[*rear] = value
}
Для извлечения элемента из начала дека необходимо передать указатель на дек. Функция извлечения элемента из начала дека может выглядеть примерно так:
int deleteFront(int *deque, int *front, int *rear)if (*front == -1)
printf("Deque is empty\n")
return -1
int value = deque[*front]
if (*front == *rear)
*front = *rear = -1
} else
*front = (*front + 1) % SIZE
return value
}
Для извлечения элемента из конца дека также необходимо передать указатель на дек. Функция извлечения элемента из конца дека может выглядеть примерно так:
int deleteRear(int *deque, int *front, int *rear)if (*front == -1)
printf("Deque is empty\n")
return -1
int value = deque[*rear]
if (*front == *rear)
*front = *rear = -1
} else if (*rear == 0)
*rear = SIZE - 1
} else
*rear = (*rear - 1) % SIZE
return value
}
Эти функции позволяют добавлять элементы в начало и конец дека, а также удалять элементы из начала и конца дека.