편집 기록

편집 기록
  • 프로필 정영훈님의 편집
    날짜2017.05.13

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


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

  • 프로필 알 수 없는 사용자님의 편집
    날짜2017.05.12

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


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