데이터 구조의 배열 대기 열
나의 체인 대기 열 에서 '대기 열의 개념 과 실현 방식' 에 대해 말 했다. 지금 우 리 는 배열 로 실현 한다. 먼저 비교적 번 거 로 운 방법 이지 만 비교적 이해 할 수 있 는 방법 이다.
#include
#include
const int MAX = 20;
struct queue {
int* queuem; //
int frontpos; //
int tailpos; //
};
여기 서 대기 열 모형 을 만 들 고 대기 열 을 만 드 는 함수 입 니 다.
struct queue* createqueue() {
struct queue* pqueue = (struct queue*)malloc(sizeof(struct queue));
//
pqueue->queuem = (int*)malloc(sizeof(int) * MAX);
pqueue->frontpos = pqueue->tailpos = -1;
return pqueue;
}
즉, 배열 에 동적 메모 리 를 신청 하고 더 블 포인터 의 초기 화 는 입 대 와 출 대, 즉 두 포인터 의 이동 이다.
bool empty(struct queue* pqueue) {
return pqueue->frontpos == pqueue->tailpos;//
}
void push(struct queue* pqueue, int data) {
//
if (pqueue->tailpos == MAX - 1) {
printf("
");
return;
}
pqueue->tailpos++;
pqueue->queuem[pqueue->tailpos] = data;
}
//
int pop(struct queue* pqueue) {
if (empty(pqueue)) {
printf(" , ");
exit(0);
}
pqueue->frontpos++;
return pqueue->queuem[pqueue->frontpos];
}
다음은 테스트.
int main() {
struct queue* myqueue = createqueue();
push(myqueue, 3);
push(myqueue, 2);
push(myqueue, 1);
push(myqueue, 0);
while (!empty(myqueue)){
printf("%d\t", pop(myqueue));
}
return 0;
}
주의 하 세 요. 배열 이 실현 하 는 대기 열 공간 은 모두 고정 되 어 있 습 니 다. 저 장 된 데 이 터 는 다소 일정한 것 입 니 다. 요 소 를 삭제 하 는 것 도 위조 삭제 입 니 다. 데 이 터 는 아직 존재 합 니 다. 우리 의 포인터 가 이동 한 것 에 불과 합 니 다.
다음은 가장 실제 적 이 고 실 용적 인 방법 입 니 다. 직접적 이 고 정태 적 인 배열 이 실현 되 는 것 입 니 다. 즉, 이 구 조 를 모 의 하 는 것 입 니 다. 어떤 방법 이 든 이런 구조 라면 모두 대열 입 니 다.
int main() {
int myqueue[MAX] = {
0 };
int front = -1;
int tail = -1;
int i;
myqueue[++tail] = 4;
myqueue[++tail] = 3;
myqueue[++tail] = 3;
for (i = 1; i < 9; i++) {
myqueue[++tail] = i;
}
while (front != tail) {
printf("%d\t", myqueue[++front]);
}
return 0;
}
자, 이상 은 배열 대열 입 니 다. 그 는 여러 곳 에 활용 할 수 있 습 니 다.다음 블 로그, 우선 대기 열
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.