#include < stdio.h>
#include < stdlib.h>
#define Q_SIZE 100
typedef int element; //int형을 큐 element의 자료형으로 정의
typedef struct{
element queue[Q_SIZE];
int front, rear;
} QueueType;
QueueType *createQueue()
{
QueueType *Q;
Q = (QueueType *)malloc(sizeof(QueueType));
Q->front=-1; // front 초기값 설정
Q->rear=-1; // rear 초기값 설정
return Q;
}
int isEmpty(QueueType *Q)
{
if (Q->front == Q->rear) {
printf("\n Queue is empty! \n");
return 1;
}
else return 0;
}
int isFull(QueueType *Q)
{
if (Q->rear == Q_SIZE-1)
{
printf("\n Queue is full! \n");
return 1;
}
else return 0;
}
void enQueue(QueueType *Q, element item) // 큐의 rear에 원소를 삽입하는 연산
{
if(isFull(Q)) exit(1);
else
{
Q->rear++;
Q->queue[Q->rear] = item;
}
}
element deQueue(QueueType *Q) // 큐의 front에서 원소를 삭제하고 반환하는 연산
{
if (isEmpty(Q)) exit(1);
else {
Q->front++;
return Q->queue[Q->front];
}
}
void del(QueueType *Q) // 큐의 front에서 원소를 삭제하는 연산
{
if (isEmpty(Q)) exit(1);
else Q->front++;
}
element peek(QueueType *Q)
// 큐의 가장 앞에 있는 원소를 검색하여 반환하는 연산
{
if (isEmpty(Q)) exit(1);
else return Q->queue[Q->front+1];
}
void printQ(QueueType *Q) // 큐의 내용을 출력하는 연산
{
int i;
printf(" Queue : [");
for(i=Q->front+1; i<=Q->rear; i++)
{
printf("%d", Q->queue[i]);
printf("|");
}
printf(" ] \n");
}
void main(void)
{
QueueType *Q1 = createQueue();
element data1, data2,data3;
int i,change;
printf("0보다 큰 정수형 숫자만 입력하세요 \n");
printf("첫번째 숫자 입력 : ");
scanf("%d",&data1);
printf("두번째 숫자 입력 : ");
scanf("%d",&data2);
if(data2<data1)
{
change = data2;
data2 = data1;
data1 = change;
}
enQueue(Q1,data1); //큐에 첫번째와 두번째값 삽입
enQueue(Q1,data2);
printQ(Q1);
for(i=0; i<=10; i++)
{
data1 = *Q1 -> &queue[i]; //오류나는 위치
data2 = *Q1 -> &queue[i+1]; //오류나는 위치
data3 = data1 + data2;
enQueue(Q1,data3);
}
printQ(Q1);
getchar();
}
숫자 두개를 입력받은후 그것을 큐에 차례로 넣은후에 피보나치수열처럼 두수를 더한후에 다시 결과값을 큐에 넣는 프로그램을 만들려고합니다. 오류나는 위치는 메인의 data1 = *Q1 -> &queue[i]; 이부분입니다 포인터 Q1이 가르키고 있는구조체의 queue배열의 원소를 data1에 넣을려고하는데 &연산자가 오류가 납니다 &연산자를 빼자니 *Q1의 피연산자가 포인터가 아니라고 오류가 나네요. 해결방법좀 알려주세요.