데이터 구조 (6) 순환 대기 열의 기본 조작 입 대 퇴 대

6361 단어 데이터 구조
대기 열 특성: 먼저 나 가기 (FIFO) - 앞 선 대기 열의 요소 가 먼저 나 옵 니 다. 우리 가 살 고 있 는 대기 열 (먼저 줄 을 서 있 는 사람 이 먼저 끝 냅 니 다) 에서 유래 한 것 입 니 다. N 개의 요소 공간의 순환 대기 열 은 최대 N - 1 개의 유효 요소 만 저장 할 수 있 습 니 다. 이것 도 대부분의 교재 의 방법 입 니 다.
4. 567917. 대열 은 다음 과 같은 몇 가지 조작 이 있다. 4. 567918.
void init(PQUEUE);//    
void in(PQUEUE);//   
void out(PQUEUE,int *);//   
void printQueue(PQUEUE);//     
bool is_empty(PQUEUE);//       
bool is_full(PQUEUE);//      

1) 순환 대기 열 초기 화: front = rear = 0; 2) 입단 작업: rear = (rear + 1)% size;3) 파티 작업: front = (front + 1)% size;4) 빈 대기 열 여 부 를 판단 합 니 다: front = rear;5) 대기 열 이 가득 찼 는 지 판단: front = (rear + 1)% size;6) 대기 열의 각 요 소 를 옮 겨 다 닌 다.
#include <stdio.h>
#include <malloc.h>
//    ,     
typedef struct Queue{
    int * base; 
    int front;//  
    int rear;//   
    int len;//     
}QUEUE,*PQUEUE;
void init(PQUEUE);//    
void in(PQUEUE);//   
void out(PQUEUE,int *);//   
void printQueue(PQUEUE);//     
bool is_empty(PQUEUE);//       
bool is_full(PQUEUE);//      
int main(void){
    QUEUE q;
    int val; 
    init(&q);
    in(&q); 
    in(&q); 
    in(&q); 
    printQueue(&q); 
    out(&q,&val); 
    printf("      :%d
"
,val); printQueue(&q); return 0; } // void init(PQUEUE pQ){ int len; printf(" :"); scanf("%d",&len); pQ->base =(int*)malloc( sizeof(int)*(len+1) );// , if(pQ->base == NULL){ printf(" , ."); exit(-1); } pQ->front = pQ->rear = 0; pQ->len = len; } // , , ( NULL) void in(PQUEUE pQ){ if(is_full(pQ)){ printf(" ,
"
); return; } int val; printf(" :"); scanf("%d",&val); pQ->base[pQ->rear] = val; pQ->rear = (pQ->rear+1)%pQ->len; } // void out(PQUEUE pQ,int * pVal){ if( is_empty(pQ) ){ printf(" ,
"
); return; } *pVal = pQ->base[pQ->front]; pQ->front = (pQ->front+1)%pQ->len; } // void printQueue(PQUEUE pQ){ if( is_empty(pQ) ){ printf("
"
); return; } printf(" :"); int t = pQ->front; while(t != pQ->rear){ printf("%d ",pQ->base[t]); t = (t+1)%pQ->len; } printf("
"
); } // bool is_empty(PQUEUE pQ){ return pQ->front == pQ->rear; } // bool is_full(PQUEUE pQ){ return (pQ->rear+1)%pQ->len == pQ->front; }

좋은 웹페이지 즐겨찾기