Преминах в ситуация, в която трябваше да внедря структура от данни тип опашка. Това е така:
(1) Да предположим, че има масив data[50]= {1,2,3,4,5,6};
(2) int Front трябва да сочи към първия индекс, а int rear трябва да сочи към последния индекс.
(3) Сега трябва да добавя първи и втори елемент от този масив. Да предположим, че правя това (i+2=3) и това 3 ще бъде зададено най-накрая чрез rear+1 (data[rear+1]), Сега, когато се случи второто изпълнение, не трябва да вземаме предвид първите два елемента (те вече са добавени), така че в този случай можем да направим data[front+2]. Но обърнете внимание тук, моля, защото това +2 ще бъде направено само за първи път, след това ще бъде само +1 (тъй като добавихме само един елемент, а за първи път добавихме 2 елемента) .И елементът, получен при добавяне, трябва да отиде на последно място в индекса като полученото "3" ще отиде най-накрая като това {1,2,3,4,5,6,3}.
(4) Така че трябва да вземем предвид
(4.a) Увеличаване на задната част с едно при всяко добавяне.
(4.b) Увеличаване на фронта с един (приемете първото добавяне, където добавяме два елемента).
(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)
}
}
**Моето съмнение е как да увелича фронта с две добавяния за първи път и чрез увеличаване с един след първото добавяне, така че първият винаги да сочи към елемента, който трябва да се добави (увеличаването не е трудно, направих го). Моля, помогнете ми за предното увеличение, Алгоритъмът и кодът ще са много благодарни.
size
и има множество начини за справяне с проблемите с откриването на пълно срещу празно в кръгов буфер. Някои от тях тук. - person WhozCraig   schedule 06.02.2014