데이터 구조 순환 대기 열의 실현

1. 순환 대기 열의 실현
순서 대기 열의 실현 으로 인해 가짜 넘 침 이 발생 할 수 있 습 니 다. 여기 서 순환 대기 열 을 도입 합 니 다. 물론, 여기 서 데이터 가 대기 열 에 있 는 최대 규 모 를 알 아야 합 니 다. 그렇지 않 으 면 순환 대기 열 이 느 린 후에 확장 하려 면 매우 번 거 로 워 집 니 다!
요청:
실험 7. 순환 대기 열의 각종 기본 연산 을 실현 하 는 알고리즘
1 실험 목적
이 실험 은 순환 대열 의 각종 기본 연산 을 실현 하고 이 실험 을 통 해 선형 구조의 대열 의 특징 을 더욱 깊이 이해 해 야 한다.
 
2 실험 내용
순환 대기 열의 각종 기본 연산 을 실현 하고 이 를 바탕 으로 메 인 프로그램 을 설계 하여 다음 과 같은 기능 을 완성 합 니 다.
(1) 대기 열 초기 화
(2) 대기 열 이 비어 있 는 지 여 부 를 판단 합 니 다.
(3) 순서대로 팀 에 들 어 가 는 요 소 는 학 번 분해 후의 숫자 이다. 예 를 들 어 학 번 이 20161100 이면 팀 에 들 어 가 는 요 소 는 숫자 이다. 2, 0, 1, 6, 1, 1, 0, 0 이다.
(4) 하나의 요 소 를 출력 하여 이 요 소 를 출력 합 니 다.
(5) 순서대로 입장 원소 9, 8, 7
(6) 모든 요 소 를 정렬 하고 출력 정렬
(7) 방출 대기 열
 구체 적 인 코드 는 다음 과 같다.
#include
#include

//******     ******
#define OK 1
#define NO 0
#define QUEUE_MAX_SIZE 20

//******        ******
typedef int Status;
typedef char ElemType;

//******      ******
typedef struct node
{
	ElemType *book;
	int front;
	int rear;
	int QueSize;
}SqQueue,*QueuePoint;

QueuePoint InitQueue()
{
	QueuePoint p=(QueuePoint)malloc(sizeof(SqQueue));
	if(p==NULL)
	{
		printf("                !
"); return p; } p->book=(ElemType *)malloc(QUEUE_MAX_SIZE*sizeof(ElemType)); p->front=p->rear=0; p->QueSize=QUEUE_MAX_SIZE; if(p->book == NULL) printf(" !
"); return p; } Status QueueEmpty(QueuePoint Head) { if(Head->front == Head->rear) return OK; return NO; } Status QueuePush(QueuePoint Head,ElemType ch) { if((Head->rear+1)%Head->QueSize == Head->front) { // printf("
, , !
"); return NO; } Head->book[Head->rear]=ch; Head->rear=(Head->rear+1)%Head->QueSize; return OK; } Status QueuePop(QueuePoint Head,ElemType *ch) { if(Head->front == Head->rear) { // printf("
, !
"); return NO; } *ch=Head->book[Head->front]; Head->front=(Head->front+1)%Head->QueSize; return OK; } int main() { QueuePoint Head; ElemType ch; Head=InitQueue(); printf("%s
",QueueEmpty(Head)?" !":" !"); while((ch=getchar())!='
') QueuePush(Head,ch); QueuePop(Head,&ch); printf("%c
",ch); while((ch=getchar())!='
') QueuePush(Head,ch); while(QueuePop(Head,&ch)) printf("%c",ch); free(Head->book); free(Head); printf("
!
"); return 0; }

요약:
순환 대기 열 은 대기 열 길이 에 대한 계산 과 공식 추리 Length = (Q. rear - Q. front + Q. MaxSize)% Q. MaxSize 를 파악 해 야 합 니 다.

좋은 웹페이지 즐겨찾기