14 - 데이터 구조대기 열 - 알고리즘 구현

---------------------------------
정의 순환 대기 열
대기 열 초기 화
대열 에 들어가다
대열 에 나가다
두루
가득 찼 는 지 여부
비어 있 는 지 여부
---------------------------------
정의 순환 대기 열
//        
typedef struct Queue
{
    int * pBase;//     
    int front;  //      
    int rear;   //      
} QUEUE;

대기 열 초기 화
//       
void init(QUEUE * qQueue)
{
    printf("          : ");
    scanf("%d", &queueLen);
    //   
    qQueue->pBase = (int *) malloc( sizeof(int) * queueLen );
    // 
    qQueue->front = 0;
    qQueue->rear = 0;

    return;
}

대열 에 들어가다
//   
bool enterQueue(QUEUE * pQueue, int value)
{
    if ( isFull(pQueue) )
    {
        return false;
    }
    
    //   rear        
    pQueue->pBase[pQueue->rear] = value;

    // rear     1
    pQueue->rear = (pQueue->rear + 1) % queueLen;

    return true;
}

대열 에 나가다
//   
bool outQueue(QUEUE * pQueue, int * pValue)
{
    if ( isEmpty(pQueue) )
    {
        return false;
    }
    //          
    *pValue = pQueue->pBase[pQueue->front];

    //   
    pQueue->front = (pQueue->front + 1) % queueLen;

    return true;
}

두루
//   
void traverseQueue(QUEUE * pQueue)
{
    printf("======  ======
"); int start = pQueue->front; for (; start != pQueue->rear; start = (start + 1) % queueLen) { printf("%d
", pQueue->pBase[start]); } return; }

가득 찼 는 지 여부
//         
bool isFull(QUEUE * pQueue)
{
    if ( (pQueue->rear + 1) % queueLen == pQueue->front )
    {
        return true;
    }
    return false;
}

비어 있 는 지 여부
//         
bool isEmpty(QUEUE * pQueue)
{
    if (pQueue->rear == pQueue->front)
    {
        return true;
    }    
    return false;
}

전체 코드 07 - queue. c
#include <stdio.h>
#include <malloc.h>
#include <stdbool.h>

int queueLen;   //     ,     

//        
typedef struct Queue
{
    int * pBase;//     
    int front;  //      
    int rear;   //      
} QUEUE;

//       
void init(QUEUE * qQueue);
//   
bool enterQueue(QUEUE * pQueue, int value);
//   
bool outQueue(QUEUE * pQueue, int * pValue);
//   
void traverseQueue(QUEUE * pQueue);
//         
bool isFull(QUEUE * pQueue);
//         
bool isEmpty(QUEUE * pQueue);

int main(void)
{
    QUEUE queue;   
    //    
    init(&queue);

    //   
    int count;
    for (count = 0; count < 4; ++count)
    {
        if ( ! enterQueue(&queue, count + 1) )
        {
            printf("%d,     !!!
", count + 1); continue; } printf("%d, !
", count + 1); } // traverseQueue(&queue); // int value; for (count = 0; count < 13; ++count) { if (outQueue(&queue, &value)) { printf(" , : %d
", value); continue; } printf(" , !!
"); } traverseQueue(&queue); return 0; } // void init(QUEUE * qQueue) { printf(" : "); scanf("%d", &queueLen); // qQueue->pBase = (int *) malloc( sizeof(int) * queueLen ); // qQueue->front = 0; qQueue->rear = 0; return; } // bool enterQueue(QUEUE * pQueue, int value) { if ( isFull(pQueue) ) { return false; } // rear pQueue->pBase[pQueue->rear] = value; // rear 1 pQueue->rear = (pQueue->rear + 1) % queueLen; return true; } // bool isFull(QUEUE * pQueue) { if ( (pQueue->rear + 1) % queueLen == pQueue->front ) { return true; } return false; } // void traverseQueue(QUEUE * pQueue) { printf("====== ======
"); int start = pQueue->front; for (; start != pQueue->rear; start = (start + 1) % queueLen) { printf("%d
", pQueue->pBase[start]); } return; } // bool outQueue(QUEUE * pQueue, int * pValue) { if ( isEmpty(pQueue) ) { return false; } // *pValue = pQueue->pBase[pQueue->front]; // pQueue->front = (pQueue->front + 1) % queueLen; return true; } // bool isEmpty(QUEUE * pQueue) { if (pQueue->rear == pQueue->front) { return true; } return false; }

좋은 웹페이지 즐겨찾기