상세 한 데이터 구조 C 언어 구현 순환 대기 열
순환 대열 의 기초 지식
1.순환 대기 열 은 몇 개의 인자 가 필요 합 니까?
순환 대기 열 은 2 개의 인자,front 와 rear 가 필요 합 니 다.
2.순환 대기 열 매개 변수의 의미
(1)대기 열 이 초기 화 될 때 front 와 rear 값 은 0 입 니 다.
(2)대기 열 이 비어 있 지 않 을 때 front 는 대기 열의 첫 번 째 요 소 를 가리 키 고 rear 는 대기 열의 마지막 요소 의 다음 위 치 를 가리킨다.
(3)대기 열 이 비어 있 을 때 front 는 rear 의 값 과 같 지만 0 이 아 닙 니 다.
3.순환 대기 열 입 대 를 위 한 알고리즘
(1)값 을 rear 가 있 는 위치 에 저장 합 니 다.
(2)
rear=(rear+1)%maxsize
그 중에서 maxsize 는 배열 의 길 이 를 나타 낸다.프로그램 코드:
bool Enqueue(PQUEUE Q, int val)
{
if(FullQueue(Q))
return false;
else
{
Q->pBase[Q->rear]=val;
Q->rear=(Q->rear+1)%Q->maxsize;
return true;
}
}
4.순환대 목록 의 위조 알고리즘(1)먼저 팀 의 값 을 저장 합 니 다.
(2)
front=(front+1)%maxsize
그 중에서 maxsize 는 배열 의 길 이 를 나타 낸다.프로그램 코드:
bool Dequeue(PQUEUE Q, int *val)
{
if(EmptyQueue(Q))
{
return false;
}
else
{
*val=Q->pBase[Q->front];
Q->front=(Q->front+1)%Q->maxsize;
return true;
}
}
5.순환 대기 열 이 비어 있 는 지 여 부 를 어떻게 판단 합 니까?if(front==rear)
대기 열 이 비어 있 음;else
대기 열 이 비어 있 지 않 음;
bool EmptyQueue(PQUEUE Q)
{
if(Q->front==Q->rear) //
return true;
else
return false;
}
6.순환 대기 열 이 가득 찼 는 지 여 부 를 어떻게 판단 합 니까?이 문 제 는 비교적 복잡 하 다.만약 에 배열 의 저장 공간 이 7 이 라 고 가정 하면 이때 1,a,5,7,22,90 여섯 개의 요 소 를 저장 했다.만약 에 배열 에 하나의 요 소 를 추가 하면 4,567914.이때 대열 이 가득 찬 것 은 대열 이 비어 있 는 판단 조건 과 4,567914.같다.그러면 우 리 는 대열 이 비어 있 는 지 가득 찬 지 판단 할 수 없다.
이 문 제 를 해결 하 는 데 는 두 가지 방법 이 있다.
하 나 는 배열 의 현재 요소 의 개 수 를 기록 하 는 매개 변 수 를 추가 하 는 것 이다.
두 번 째 방법 은 하나의 저장 공간,즉 배열 의 마지막 저장 공간 을 적 게 사용 하 는 것 이다.4.567914 일 때 대기 열 이 가득 하 다.
bool FullQueue(PQUEUE Q)
{
if(Q->front==(Q->rear+1)%Q->maxsize) // ,
return true;
else
return false;
}
부록:queue.h 파일 코드:
#ifndef __QUEUE_H_
#define __QUEUE_H_
typedef struct queue
{
int *pBase;
int front; //
int rear; //
int maxsize; //
}QUEUE,*PQUEUE;
void CreateQueue(PQUEUE Q,int maxsize);
void TraverseQueue(PQUEUE Q);
bool FullQueue(PQUEUE Q);
bool EmptyQueue(PQUEUE Q);
bool Enqueue(PQUEUE Q, int val);
bool Dequeue(PQUEUE Q, int *val);
#endif
queue.c 파일 코드:
#include<stdio.h>
#include<stdlib.h>
#include"malloc.h"
#include"queue.h"
/***********************************************
Function: Create a empty stack;
************************************************/
void CreateQueue(PQUEUE Q,int maxsize)
{
Q->pBase=(int *)malloc(sizeof(int)*maxsize);
if(NULL==Q->pBase)
{
printf("Memory allocation failure");
exit(-1); //
}
Q->front=0; //
Q->rear=0;
Q->maxsize=maxsize;
}
/***********************************************
Function: Print the stack element;
************************************************/
void TraverseQueue(PQUEUE Q)
{
int i=Q->front;
printf(" :
");
while(i%Q->maxsize!=Q->rear)
{
printf("%d ",Q->pBase[i]);
i++;
}
printf("
");
}
bool FullQueue(PQUEUE Q)
{
if(Q->front==(Q->rear+1)%Q->maxsize) // ,
return true;
else
return false;
}
bool EmptyQueue(PQUEUE Q)
{
if(Q->front==Q->rear) //
return true;
else
return false;
}
bool Enqueue(PQUEUE Q, int val)
{
if(FullQueue(Q))
return false;
else
{
Q->pBase[Q->rear]=val;
Q->rear=(Q->rear+1)%Q->maxsize;
return true;
}
}
bool Dequeue(PQUEUE Q, int *val)
{
if(EmptyQueue(Q))
{
return false;
}
else
{
*val=Q->pBase[Q->front];
Q->front=(Q->front+1)%Q->maxsize;
return true;
}
}
이상 은 C 언어 가 순환 대기 열 을 실현 하 는 모든 내용 으로 데이터 구조 와 알고리즘 에 대한 연구 에 도움 이 되 고 필요 한 친구 가 참고 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 언어 간단한 파일 r/w 조작 방법데이터의 입력과 출력은 거의 모든 C 언어 프로그램과 수반된다. 입력이란 원본에서 데이터를 얻는 것이다. 출력은 단말기에 데이터를 쓰는 것으로 이해할 수 있다.이곳의 원본은 키보드, 마우스, 하드디스크, 시디, 스캐...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.