C 언어 는 동적 배열 을 사용 하여 순환 대기 열 을 실현 합 니 다.

나 는 지난 블 로그'C 언어 는 정적 배열 을 사용 하여 순환 대기 열 을 실현 합 니 다'에서 정적 배열 을 사용 하여 대기 열 을 모 의 하 는 작업 을 실현 했다.배열 의 크기 가 지정 되 어 동적 으로 확장 할 수 없습니다.그래서 이 블 로그 에서 나 는 동적 배열 로 바 뀌 었 다.동적 배열 은 메모리 공간 을 계속 열 수 있 습 니 다.다만 배열 이 초기 화 될 때 다 를 뿐 다른 배열 에 대한 작업 은 모두 같 습 니 다.코드 업로드https://github.com/chenyufeng1991/Queue_DynamicArray 。
(1)선언 변수
static int *queue;//    
static int maxSize;//    
static int head;//    
static int tail;//    

(2)대기 열 초기 화
//     
void InitQueue(int size){

    maxSize = size;
    queue = (int *)malloc(size * sizeof(int));
    head = 0;
    tail = 0;
}

(3)대기 열 진입
//   
void EnQueue(int value){
    //       
    if ((tail + 1) % maxSize == head) {
        printf("    ,    
"); }else{ // queue[tail] = value; tail = (tail + 1) % maxSize; } }

(4)대기 열 나 가기
//   
int DeQueue(){

    int temp;
    //       
    if (head == tail) {
        printf("    ,    
"); }else{ temp = head; head = (head + 1) % maxSize; } return temp; }

(5)대기 열 이 비어 있 는 지 판단
//        
int IsEmpty(){
    if (head == tail) {
        printf("    
"); return 1; } printf("
"); return 0; }

(6)대기 열 이 가득 찼 는 지 판단
//        
int IsFull(){

    if ((tail + 1)% maxSize == head) {
        printf("    
"); return 1; } printf("
"); return 0; }

(7)인쇄 대기 열 요소
테스트 코드
//      
void PrintQueue(){
    for (int i = head; i < tail; i++) {
        printf("%d ",queue[i]);
    }
    printf("
"); }

좋은 웹페이지 즐겨찾기