티스토리 뷰

Programming?/C++

[C] 큐

Erlka 2012. 6. 10. 12:22


#include<stdio.h>
#include <stdlib.h>
#define MAXQUEUE 5

struct queuestruct
{
    int queue[MAXQUEUE];
    int front, rear;
};

void AddQueue(struct queuestruct *q1, int x);
int DeleteQueue(struct queuestruct *q1);

void main()
{
    struct queuestruct q1;
    int select, data;
    q1.front = -1;
    q1.rear = -1;

    do{
        printf("\n *****************************************\n");
        printf("* 1. AddQueue(큐에 데이터 삽입) 선택       *\n");
        printf("* 2. DeleteQueue(큐에서 데이터 추출) 선택  *\n");
        printf("* 3. 큐 종료                               *\n");
        printf("\n *****************************************\n");   

        printf("메뉴를 선택하세요 (1,2,3,)");
        scanf("%d",&select);

        if(select == 1)
        {
            printf("삽입할 데이터를 입력하세요 ? ");
            scanf("%d",&data);
            AddQueue(&q1, data);
        }
        else if(select == 2)
        {
            printf("큐에서 꺼낸 데이터 = %d \n",DeleteQueue(&q1));
        }
    }while (select != 3);
}

void AddQueue(struct queuestruct *q1, int x)
{
    if(q1->rear == MAXQUEUE -1)
    {
        printf("큐가 가득 찼습니다");
    }
    q1->queue[++q1->rear] = x;
}

int DeleteQueue(struct queuestruct *q1)
{

    int deletedata;
    if(q1->front == q1->rear)
    {
        printf("큐가 비었습니다");
        exit(1);
    }
    else
    {
        deletedata = q1->queue[++q1->front];
    }
    return(deletedata);
}

 



  1,2,3,4,5 입력후 1,2를 빼고 6을 넣었을때의 모습
 
 

큐 시프트

데이터를 뺴내었을때 한칸씩 밀어 큐에 잔여 저장 공간을 없앰

 

#include<stdio.h>
#include <stdlib.h>
#define MAXQUEUE 5 // MAXQUEUE를 5로 초기화

struct queuestruct
{
    int queue[MAXQUEUE];
    int front, rear;
};

void AddQueue(struct queuestruct *q1, int x);
int DeleteQueue(struct queuestruct *q1);

void main()
{
    struct queuestruct q1;
    int select, data;
    q1.front = -1;
    q1.rear = -1;

    do{
         printf("\n *****************************************\n");
         printf("* 1. AddQueue(큐에 데이터 삽입) 선택       *\n");
         printf("* 2. DeleteQueue(큐에서 데이터 추출) 선택  *\n");
         printf("* 3. 큐 종료                               *\n");
         printf("\n *****************************************\n");
        printf("메뉴를 선택하세요 (1,2,3)");
        scanf("%d",&select);

        if(select == 1) // 입력받은 데이터가 1이라면
        {
            printf("삽입할 데이터를 입력하세요 ? "); // 안내문 출력
            scanf("%d",&data); // data로 데이터 입력 받고
            AddQueue(&q1, data); // AddQueue 함수 호출
        }
            else if(select == 2) // 입력받은 데이터가 2라면
        {
            printf("큐에서 꺼낸 데이터 = %d\n",DeleteQueue(&q1)); // DeleteQueue 함수에서 데이터 받아서 출력
        }
    }while (select != 3); // select가 3이 아닐때까지 계속...
}

void AddQueue(struct queuestruct *q1, int x) // 큐 운용이 많을시를 대비하여 지정된 큐만 사용하기 위해 인자로 보냄
{
    int i,j;
    if (q1->front == -1 && q1->rear == MAXQUEUE -1) // 큐 overflow 검사
    {
        printf("큐가 가득 찼습니다.\n"); // 가득찼다면 안내문 출력
        exit(1);
    }
    else if(q1->rear == MAXQUEUE-1) // 만약 rear가 큐 마지막 방이라면
    {

        for(i=q1->front+1, j=0; i<= MAXQUEUE - 1; i++,j++) // i가 front +1, j는 0부터 i가 큐 마지막 방까지 i와 j는 증가
        {
            q1->queue[j] = q1->queue[i]; // j가 가르키는 방을 i가 가르키는 방의 데이터로 이동
        }
        q1->rear = q1->rear-q1->front-1; // rear는 rear - front -1로 변경
        q1->front = -1; // front는 -1로 변경
      }
    q1->queue[++q1->rear] = x; //q1의 rear를 증가시키고 받은 데이터를 입력
}

int DeleteQueue(struct queuestruct *q1)
{
    int deletedata; //데이터를 임시 보관하기 위한 변수 선언
    if(q1->front == q1->rear) //큐 empty 검사
    {
         printf("큐가 비었습니다.\n"); // 비었다면 안내문 출력
        exit(1);
    }
    deletedata = q1->queue[++q1->front]; //q1의 front를 증가시키고 꺼낼 데이터를 deletedata로 이동
    return(deletedata); // 받은 데이터를 리턴
}

 


 
 


 위와 동일하게 1,2,3,4,5 입력후 1,2 빼고 6,7을 입력한 다음 큐의 데이터를 모두 뺐을때
 

'Programming? > C++' 카테고리의 다른 글

[C] 구조체 퀵정렬  (0) 2012.06.10
[C] 정수형 퀵정렬  (0) 2012.06.10
[C] 스택  (0) 2012.06.10
[C] 초간단 계산기  (0) 2012.06.10
[C] 배열 최대값 프로그램(5개 입력)  (0) 2012.06.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함