데이터 구조의 배열 대기 열

13404 단어 데이터 구조대열
순서 대기 열 구 조 를 만 들 려 면 정적 분배 나 동적 으로 연속 적 인 저장 공간 을 신청 하고 두 개의 지침 을 설정 하여 관리 해 야 합 니 다.하 나 는 팀 헤드 포인터 front 로 팀 헤드 요 소 를 가리 키 고 있 습 니 다.다른 하 나 는 팀 꼬리 포인터 tail 입 니 다. 다음 입 대 된 요소 의 저장 위 치 를 가리 키 고 있 습 니 다.
나의 체인 대기 열 에서 '대기 열의 개념 과 실현 방식' 에 대해 말 했다. 지금 우 리 는 배열 로 실현 한다. 먼저 비교적 번 거 로 운 방법 이지 만 비교적 이해 할 수 있 는 방법 이다.
#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;
}

자, 이상 은 배열 대열 입 니 다. 그 는 여러 곳 에 활용 할 수 있 습 니 다.다음 블 로그, 우선 대기 열

좋은 웹페이지 즐겨찾기