관리 메뉴

πŸ’»πŸ’­πŸŽ§πŸŒ

[C][자료ꡬ쑰] 5.2 큐 μ‘μš© ν”„λ‘œκ·Έλž¨ λ³Έλ¬Έ

Cμ–Έμ–΄/자료ꡬ쑰

[C][자료ꡬ쑰] 5.2 큐 μ‘μš© ν”„λ‘œκ·Έλž¨

adorableco 2022. 1. 19. 23:02
λ°˜μ‘ν˜•

큐에 μΌμ •ν•œ λΉ„μœ¨(20%)둜 λ‚œμˆ˜λ₯Ό μƒμ„±ν•˜μ—¬ 큐에 μž…λ ₯ν•˜κ³ , μΌμ •ν•œ λΉ„μœ¨(10%)둜 νμ—μ„œ μ •μˆ˜λ₯Ό κΊΌλ‚΄λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄λ³΄μž. μƒμ‚°μžκ°€ μ†ŒλΉ„μžλ³΄λ‹€ λΉ λ₯΄λ―€λ‘œ 큐가 포화 μƒνƒœκ°€ 될 κ°€λŠ₯성이 높아진닀.

 

1. time() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” time.h νŒŒμΌμ„ 포함해야함.

2. rand() % 5 == 0 -> 20/100 = 1/5  => 20%의 ν™•λ₯  

    rand() % 10 == 0 -> 10/100 = 1/10 =>  10%의 ν™•λ₯  

    

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//=====μ›ν˜•ν μ½”λ“œ μ‹œμž‘=====
#define MAX_QUEUE_SIZE 5
typedef int element;
typedef struct { // 큐 νƒ€μž…
    element data[MAX_QUEUE_SIZE];
    int front,rear;
}QueueType;


//였λ₯˜ ν•¨μˆ˜
void error(char *message)
{
    fprintf(stderr,"%s\n",message);
    exit(1);
}

//곡백 μƒνƒœ κ²€μΆœ ν•¨μˆ˜
void init_queue(QueueType *q)
{
    q->front = q->rear = 0;
}

//곡백 μƒνƒœ κ²€μΆœ ν•¨μˆ˜
int is_empty(QueueType *q)
{
    return(q->front == q->rear);
}

//포화 μƒνƒœ κ²€μΆœ ν•¨μˆ˜
int is_full(QueueType *q)
{
    return((q->rear+1)%MAX_QUEUE_SIZE==q->front);
}

//μ›ν˜•ν 좜λ ₯ ν•¨μˆ˜
void queue_print(QueueType *q)
{
    printf("QUEUE(front=%d rear=%d) =",q->front,q->rear);
    if(!is_empty(q)){
        int i=q->front;
        do{
            i = (i+1)%(MAX_QUEUE_SIZE);
            printf("%d |",q->data[i]);
            if(i==q->rear)
                break;
        }while(i!=q->front);
    }
    printf("\n");
}

//μ‚½μž… ν•¨μˆ˜
void enqueue(QueueType *q,element item)
{
    if(is_full(q))
        error("큐가 ν¬ν™”μƒνƒœμž…λ‹ˆλ‹€");
    q->rear = (q->rear +1)%MAX_QUEUE_SIZE;
    q->data[q->rear] = item;
}

//μ‚­μ œ ν•¨μˆ˜
element dequeue(QueueType *q)
{
    if(is_empty(q))
        error("큐가 κ³΅λ°±μƒνƒœμž…λ‹ˆλ‹€");
    q->front = (q->front+1)%MAX_QUEUE_SIZE;
    return q->data[q->front];
}

//peek ν•¨μˆ˜
element peek(QueueType *q)
{
    if(is_empty(q))
        error("큐가 κ³΅λ°±μƒνƒœμž…λ‹ˆλ‹€");
    return q->data[(q->front+1)%MAX_QUEUE_SIZE];
}
//======μ›ν˜•ν μ½”λ“œ 끝========

int main()
{
    QueueType queue;
    
    init_queue(&queue);
    srand(time(NULL));
    
    for (int i=0; i<100; i++)
    {
        if(rand()%5==0){ //5둜 λ‚˜λˆ„μ–΄ 떨어지면
            enqueue(&queue, rand()%100);
        }
        queue_print(&queue);
        if(rand()%10==0){ //10둜 λ‚˜λˆ„μ–΄ 떨어지면
            int data = dequeue(&queue);
        }
    queue_print(&queue);
    }
    return 0;
}

 

κ²°κ³ΌλŠ” μ΄λŸ°μ‹μœΌλ‘œ λ‚˜μ˜¨λ‹€

더보기

QUEUE(front=0 rear=1) =91 |

QUEUE(front=0 rear=1) =91 |

QUEUE(front=0 rear=1) =91 |

QUEUE(front=0 rear=1) =91 |

QUEUE(front=0 rear=1) =91 |

QUEUE(front=0 rear=1) =91 |

QUEUE(front=0 rear=2) =91 |31 |

QUEUE(front=1 rear=2) =31 |

QUEUE(front=1 rear=2) =31 |

QUEUE(front=2 rear=2) =

QUEUE(front=2 rear=2) =

QUEUE(front=2 rear=2) =

QUEUE(front=2 rear=2) =

QUEUE(front=2 rear=2) =

QUEUE(front=2 rear=2) =

QUEUE(front=2 rear=2) =

QUEUE(front=2 rear=3) =83 |

QUEUE(front=3 rear=3) =

QUEUE(front=3 rear=3) =

QUEUE(front=3 rear=3) =

QUEUE(front=3 rear=3) =

큐가 κ³΅λ°±μƒνƒœμž…λ‹ˆλ‹€

ν™•λ₯  상 큐가 포화 μƒνƒœκ°€ 될 κ°€λŠ₯성이 λ†’λ‹€λŠ”λ° λ‚΄κ°€ λŒλ €λ΄€μ„λ• 곡백 μƒνƒœλ‚˜, 포화 μƒνƒœλ‚˜ λΉ„μŠ·ν•˜κ²Œ λ‚˜μ˜¨λ‹€...

λ°˜μ‘ν˜•

'Cμ–Έμ–΄ > 자료ꡬ쑰' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[C][자료ꡬ쑰] μˆœν™˜  (0) 2022.01.05