데이터 구조 학습 기록 (6) - 순서 순환 대기 열
2165 단어 데이터 구조 학습 소감
순환 대기 열 은 논리 적 으로 전체 선형 표 의 앞 뒤 를 연결 시 켜 '링' (실제 물리 구 조 는 1 차원 배열) 을 형성 하 는 것 이다.
즉, rear 와 front 포인터 가 MaxSize 에 도 착 했 을 때 다시 초기 위치 로 0 (합 법 적 이 어야 합 니 다. 예 를 들 어 팀 이 꽉 찼 을 때 rear + 1 을 초기 위치 로 돌아 갈 수 없습니다).
이 조작 은 모드 (나머지) 연산 을 사용 하여 rear 와 front 의 값 을 변화 시 킨 후 대기 열 길이 의 MaxSize 를 모드 로 추출 해 야 합 니 다.
논리 적 으로 배열 의 머리 와 꼬리 를 연결 하기 때문에 팀 이 꽉 차 면 팀 이 비어 있 는 판단 조건 은 모두 rear = front 이 고 팀 이 비어 있 고 팀 이 꽉 차 면 보통 세 가지 조작 이 있다.
대학원 시험 문제 에 서 는 일반적으로 첫 번 째 방식 을 사용한다.
코드 는 일반 대기 열 에 비해 차이 가 크 지 않 습 니 다. 다음 과 같 습 니 다.
#ifndef CIRCLE_H
#define CIRCLE_H
#define MaxSize 50;
typedef int Elemtype;
typedef struct SqCircularQueue{
Elemtype elem[MaxSize];
int front,rear;
}SqQueue;
//
void InitSqQueue(SqQueue &Q)
{
Q.front=Q.rear=0;
}
//
bool SqQueueEmpty(SqQueue Q)
{
if(Q.front==Q.rear)
return true;
else
return false;
}
//
bool SqQuereFill(SqQueue Q)
{
if((Q.rear+1)%MaxSize==Q.front)
return true;
else
return false;
}
//
bool EnSqQueue(SqQueue &Q,Elemtype x)
{
if(SqQuereFill(Q))
return false;
else
{
Q.elem[Q.rear]=x;
Q.rear=(Q.rear+1)%MaxSize;
return true;
}
}
//
bool DeSqQueue(SqQueue &Q,Elemtype &x)
{
if(QueueEmpty(Q))
return false;
else
{
x=Q.elem[Q.front];
Q.front=(Q.front+1)%MaxSize;
return true;
}
}
//
bool GetSqQueueHead(SqQueue Q,Elemtype &x)
{
if(QueueEmpty(Q))
return false;
else
{
x=Q.elem[Q.front];
return true;
}
}
#endif
참고 로 선택 문 제 를 제시 하 겠 습 니 다. 대기 열 에 있 는 요소 의 개 수 는 (rear - front + MaxSize)% MaxSize 입 니 다.
그리고 대기 열 이 비어 있 는 것 과 가득 찬 표 지 는 각각 무엇 입 니까? 그리고 대기 열 이 대열 에 들 어가 서 나 오 는 조작 이 두 개의 지침 에 대한 변화 등 도 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
데이터 구조 학습 기록 (7) - 체인 대기 열끝 점 의 next 를 새로 추 가 된 노드 주소 로 설정 하고 rear (꼬리 포인터) 를 rear - > next (새 노드 주소) 로 설정 한 다음 에 새로운 노드 next 를 비 웁 니 다.그래서 가장 좋 은...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.