Я столкнулся с ситуацией, когда мне нужно реализовать структуру данных типа очереди, это примерно так:
(1) Предположим, имеется массив data [50] = {1,2,3,4,5,6};
(2) int Front должен указывать на первый индекс, а int Rear должен указывать на последний индекс.
(3) Теперь мне нужно добавить первый и второй элементы этого массива. Предположим, я делаю это (i + 2 = 3), и это 3 будет наконец установлено путем выполнения back + 1 (data [rear + 1]). Теперь, когда происходит второе выполнение, нам не нужно принимать во внимание первые два элемента (они уже добавлены). Итак, в этом случае мы можем сделать data [front + 2]. Но обратите внимание, потому что это +2 будет сделано только в первый раз, после этого будет просто +1 (потому что мы добавили только один элемент, а в первый раз добавим 2 элемента) .И элемент, полученный при сложении, должен идти к последнему из полученного индекса, например "3", в конце концов, он будет иметь следующий вид {1,2,3,4,5,6,3}.
(4) Таким образом, мы должны учитывать
(4.a) Увеличение тыла на единицу при каждом добавлении.
(4.b) Увеличение Front на единицу (примите первое добавление, в котором мы добавляем два элемента).
(5) Моя идея сделать это так:
#include <stdio.h>
#define MAX 50
int data[MAX];
int rear = - 1;
int front = - 1;
void main()
{
int rear=6, front=0;
data[size]={1,2,3,4,5,6};
int count=size;
//First do addition of the first two elements
data[rear]= data[0]+data[1];
for(i=front; i<size*2-1 ; i++) //we are doing data*2-1 because we know the final obtained on doing all the addition until there is 1 element will have the size (size*2-1).
{
do
{
//here we do addition data[rear+1]=data[front]+data[rear];
// rear++;
count--;
}while (count>1);
}
for(i=0; i<size*2-1 ; i++)
{
printf("%d ", data[i]); //Now this must print "1,2,3,4,5,6,3,6,9,12,21" (addition of element at front and rear)
}
}
** Я сомневаюсь в том, как увеличить Front на два сложения в первый раз и путем увеличения на единицу после первого добавления, чтобы первый всегда указывал на добавляемый элемент (увеличение не сложно, я это сделал). Помогите, пожалуйста, по Front increment, Алгоритм и код буду очень признателен.
size
, и существует несколько способов решения проблем обнаружения полного или пустого в кольцевом буфере. Некоторые из них здесь. - person WhozCraig   schedule 06.02.2014