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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.