다른 순환 대기 열
9 도 ac 에서 그런대로 괜 찮 은 대기 열 문 제 를 기록 하고 배열 이 실현 하 는 순환 대기 열 을 기록 합 니 다.
제목 설명:
데이터 구조 안에 순환 대기 열 이라는 구조 가 있다 는 것 을 모두 가 알 고 있다.말 그대로 이것 은 대열 이 고 순환 적 이다.하지만 지금 은 장난꾸러기 형 이 이 순환 대열 에 규칙 을 붙 였 는데 그 중 5 가지 지령 이 있 었 다.
(1) Push K, 원소 K 를 대기 열 에 넣 습 니 다.
(2) Pop, 맞 춤 형 요소 가 대기 열 에서 나 옵 니 다.
(3) Query K, 대기 열 에 있 는 K 번 째 요 소 를 찾 습 니 다. K 의 합 법성 에 주의 하 십시오.
(4) Isempty, 대기 열 이 비어 있 는 지 판단 합 니 다.
(5) Isfull, 대기 열 이 가득 찼 는 지 판단 합 니 다.
현재 N 줄 명령 이 있 으 며, 대기 열 크기 가 M 인지 알려 줍 니 다.
입력:
첫 줄 은 두 개의 정수 N 과 M 을 포함한다.1<=N,M<=100000。
다음은 N 줄 이 있 습 니 다. 명령 을 표시 하고 명령 형식 은 제목 설명 을 보십시오.
그 중에서 요 소 는 모두 int 범위 에 있다.
출력:
명령 어 (1) 에 대해 서 는 대기 열 이 가득 차 면 출력 failed, 그렇지 않 으 면 출력 을 하지 않 습 니 다.
명령 어 (2) 에 대해 서 는 대기 열 이 비어 있 으 면 출력 failed, 그렇지 않 으 면 출력 을 하지 않 습 니 다.
명령 (3) 에 대해 출력 대기 열 에 있 는 K 번 째 요소 가 존재 하지 않 으 면 출력 failed 입 니 다.
명령 (4) 과 (5) 에 대해 서 는 yes 또는 no 로 대답 합 니 다.
상세 한 상황 은 견본 을 보십시오.
샘플 입력:
12 2Push 1Push 2Push 3Query 2Query 3IsemptyIsfullPopPopPopIsemptyIsfull
샘플 출력:
failed2failednoyesfailedyesno
AC 코드:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define queuesize 100001 //
struct queue
{
int front;
int rear;
int data[queuesize];
int count; //
};
void InitQueue(struct queue *Q);
void EnQueue(struct queue *Q, int element, int m);
void Dequeue(struct queue *Q, int m);
void QueueSearch(struct queue *Q, int k, int m);
int main()
{
int n, m, i, element, k, flag;
char command[10];
while(scanf("%d%d",&n, &m) != EOF)
{
if(n < 1 || m > 100000)
return 0;
struct queue *Q;
Q = malloc(sizeof(struct queue));
InitQueue(Q);
for(i = 0; i < n; i ++)
{
scanf("%s",command);
if (strcmp(command,"Push") == 0)
{
scanf("%d",&element);
EnQueue(Q, element, m);
}else if (strcmp(command,"Pop") == 0)
{
Dequeue(Q, m);
}else if (strcmp(command,"Query") == 0)
{
scanf("%d",&k);
QueueSearch(Q, k, m);
}else if (strcmp(command,"Isempty") == 0)
{
flag = (Q -> count == 0)? 1 : 0;
if(flag)
{
printf("yes
");
}else
{
printf("no
");
}
}else if (strcmp(command,"Isfull") == 0)
{
flag = (Q -> count == m)? 1 : 0;
if(flag)
{
printf("yes
");
}else
{
printf("no
");
}
}
}
}
return 0;
}
/**
* Description:
*/
void InitQueue(struct queue *Q)
{
Q -> front = Q -> rear = 0;
Q -> count = 0;
}
/**
* Description:
*/
void EnQueue(struct queue *Q, int element, int m)
{
int flag;
flag = (Q -> count == m)? 1 : 0;
if(!flag)
{
Q -> data[Q -> rear] = element;
Q -> count ++;
Q -> rear = (Q -> rear + 1) % m;
}else
{
printf("failed
");
}
}
/**
* Description:
*/
void Dequeue(struct queue *Q, int m)
{
int flag;
int element;
flag = (Q -> count == 0)? 1 : 0;
if(!flag)
{
element = Q -> data[Q -> front];
Q -> front = (Q -> front + 1) % m;
Q -> count --;
}else
{
printf("failed
");
}
}
/**
* Description:
*/
void QueueSearch(struct queue *Q, int k, int m)
{
int flag, temp;
flag = (Q -> count == 0)? 1: 0;
temp = Q -> front + k - 1;
if((!flag) && (k <= m && k >= 1))
{
if((Q -> front < Q -> rear) && ( Q-> front <= temp && Q -> rear > temp))
printf("%d
",Q -> data[temp]);
else if((Q -> front > Q -> rear) && (temp >= Q -> front || temp < Q->rear))
printf("%d
",Q -> data[temp]);
else if(Q -> front == Q -> rear)
printf("%d
",Q -> data[temp]);
else
printf("failed
");
}else
{
printf("failed
");
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.