c언어 피보나치 수열을 큐(단일 연결리스트)에 넣는 질문입니다

조회수 2163회
#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의 피연산자가 포인터가 아니라고 오류가 나네요. 해결방법좀 알려주세요.

1 답변

  • Q1은 QueueType * 형 이기 때문에 *Q1 -> &queue[i];가 아니라

    1. Q1->queue[i]; 또는
    2. (*Q1).queue[i];

    와 같이 쓰셔야 합니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)