[英]queue type data structure implementation using arrays
我遇到了必須實現隊列類型數據結構的情況,就像這樣:
(1)假設有一個數組data [50] = {1,2,3,4,5,6};
(2)int前面必須指向第一個索引,而int后面必須指向必須指向最后一個索引。
(3)現在我必須添加此數組的第一個和第二個元素。 假設我這樣做了(i + 2 = 3),最后通過執行Rear + 1(data [rear + 1])來設置這3,現在當第二次執行發生時,我們不必考慮前兩個元素(它們已經添加),因此在這種情況下,我們可以執行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增加兩個第一次相加以及如何在第一次添加后相加一個,以便first總是指向要添加的元素(增加並不困難,我已經做到了)。 請幫助我增加Front,算法和代碼將不勝感激。
int max = 50;
int index = 0;
int endIndex = 5; //You can compute the length. I will just hard code
int list[max] = {1,2,3,4,5,6};
int front = list[index];
int rear = list[endIndex];
while (index!= endIndex)
{
if (index==0)
{
index++;
list[endIndex+index] = front+list[index];
rear = list[endIndex+index];
index++;
front = list[index];
}
else
{
list[rear+1] = front + rear;
index++;
front = list[index];
rear = list[endIndex+index];
}
}
這應該做您想要的。 我沒有測試它,但我相信它就是您所描述的。
最終,我設法解決了這個問題,我將我的代碼留給其他人使用(如果他們將來使用它):
#include <stdio.h>
void main()
{
int max = 50;
int index = 0,Front=0,Rear,min,min2,location,i,location2,flag[30],check=0,j;
int data[50] = {1,2,3,4};
Rear=3;
//Rear=size-1
for(i=0; i<=Rear;i++)
{
flag[i]=0;
//printf("");
}
int count=Rear;
do
{
//printf("check5 \n ");
if(Front==0)
{
printf("check1 \n ");
Rear++;
data[Rear]=data[Front] +data[1];
flag[Front]=1;
flag[Rear]=0;
flag[1]=1;
printf("datafront: %d\n ", data[Front]);
printf("*****************dataRear: %d\n ", data[Rear]);
printf("Front : %d\n ", Front);
printf("Rear : %d \n", Rear);
//printf("flagRear: %d\n ", flag[Front]);
Front=Front+2;
//Rear++;
}
if(data[Front]==data[Rear] && flag[Rear] ==0 && flag[Front]==0 )
{
printf("check3 \n ");
printf("Front : %d\n ", Front);
// Rear++;
printf("Rear : %d \n", Rear);
printf("dataFront1: %d\n ", data[Front]);
printf("dataRear1: %d\n ", data[Rear]);
data[Rear+1]= data[Front] +data[Rear];
printf("************dataRear[Rear+1]: %d\n ", data[Rear+1]);
flag[Front]=1;
flag[Rear]=1;
flag[Rear+1]=0;
printf("check Front front : %d\n", Front);
for(j=Front+1;j<=Rear;j++)
{
if(flag[j]==0)
{
Front=j;
break;
}
}
// Front++;
Rear++;
}
if(data[Front]<data[Rear] && flag[Rear] ==0 && flag[Front]==0)
{
printf("check4 \n ");
printf("Front : %d\n ", Front);
printf("Rear : %d \n", Rear);
printf("dataFront1: %d\n ", data[Front]);
printf("dataRear1: %d\n ", data[Rear]);
printf("Flagcheck data[6].flag : %d \n",flag[6]);
int start= Front+2;
min= data[Front];
for(j=Front+1;j<=Rear;j++)
{
if(flag[j]==0)
{
min2=data[j];
location2=j;
printf("j = %d \n",j);
break;
}
}
location=Front;
for(i=start;i<=Rear;i++)
{
if (data[i] <min && flag[i]==0)
{
min=data[i];
location=i;
min2=min;
}
if (data[i]<min2&& flag[i]==0)
{
min2=data[i];
location2=i;
}
}
data[Rear+1]= min2+min;
printf("min= %d\n", min);
printf("min2= %d\n", min2);
printf("location= %d\n", location);
printf("location2= %d\n", location2);
printf(" ***********data[Rear+1] = %d\n", data[Rear+1]);
flag[location2]=1;
flag[location]=1;
flag[Rear+1]=0;
for(j=location+1;j<=Rear;j++)
{
if(flag[j]==0)
{
Front=j;
break;
}
}
Rear=Rear+1;
printf("Front : %d\n ", Front);
printf("Rear : %d \n", Rear);
}
//printf("\n");
//printf("Front : %d\n ", data[Front]);
//printf("Rear : %d \n", data[Rear]);
count--;
} while(Front!=Rear && count>0);
for (i=0;i<15;i++)
{
printf(" %d ", data[i]);
}
//char path[100]={'\0'};
//traverse_tree(data, 10,path);
printf("\n");
}
////
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.