링크 는 대기 행렬 과 대기 행렬 원 리 를 실현 한다.

대기 열 --- 링크 구현
  • 대기 열 을 만 들 고 초기 화
  • 입단 과 출전
  • 대기 열 및 대기 열 요소 가 져 오기
  •  :
           :   --    
    

    이전 절: 대기 열 – 배열 구현
    대기 열 생 성 및 초기 화
    입 대 · 출 대
    대기 열 및 대기 열 요소 비우 기
    1.      
    
    #include 
    #include 
    #include 
    
    #define MaxSize 5  //    
    using namespace std;
    
    typedef int DataType;
    
    typedef struct _Qnode {
     DataType data;  //int data
     struct _Qnode* next;
    }QNode;
    
    typedef QNode* QueuePtr;
    
    typedef struct Queue {
     int length;   //       
     QueuePtr fron;  //     Qnode* fron
     QueuePtr rear;  //     Qnode* rear
    }LinkQueue;
    
    //   
    bool InitQueue(LinkQueue*LQ){
     	if (!LQ) return false;
    	 LQ->length = 0; //     
    	 LQ->fron = LQ->rear = NULL; //        
     	return true;
     }
    2.0    :
                       ,         ,             ,
                 next  NULL,              ,         ,
                                     ,
                               qNode,             ,
                       ++ ok 
    
        :
    
    //        
    bool FullQueue(LinkQueue* LQ) {
     	if (!LQ) return false;
     
    	 if (LQ->length == MaxSize) return true;
     	return false;
    }
    
    //        
    bool EmptyQueue(LinkQueue* LQ) {
     	if (!LQ) return false;
     
    	 if (LQ->fron == NULL) return true;
     	return false;
    }
    
    bool EnterQueue(LinkQueue* LQ, DataType data) {
     if (!LQ) return false;
     	//       
    if (FullQueue(LQ)) {
        cout << "      :" << data << "     !" << endl;
     return false;
    }
    
    //      
     	QNode* qNode = new QNode;
     //      
    	 qNode->data = data;
     //  next  0
    	 qNode->next = NULL;
    
    //     
     	if (EmptyQueue(LQ)) {
     	    LQ->fron = LQ->rear = qNode;
     	} else { 
      //      :
         //        
     	 LQ->rear->next = qNode;
      //        
     	 LQ->rear = qNode;
           }
      //    ++
    	 LQ->length++;
     return true;
    }
    2.1    :
                      ,        ,             ,
                        ,            ,
                         ,      --,        。
    
    //  
    bool DeleteQueue(LinkQueue* LQ, DataType* data) {
     //        
     QNode* tmp = NULL;
     //        
     if (!LQ || EmptyQueue(LQ)) { 
      cout << "    " << endl;
      return false; 
     }
     //              
     if (!data) return false;
     //            
     tmp = LQ->fron;
     //          
     LQ->fron = tmp->next;
     //           ,           
     if (!LQ->fron) LQ->rear = NULL;
    *data = tmp->data;
     LQ->length--;
     //      
     delete tmp;
     return true;
    }
    3.0      :
    	                     ,      ,
    	              ,    ,    ,
    	                 NULL
    
    //    
    bool ClearQueue(LinkQueue* LQ) {
     if (!LQ) return false;
     while (LQ->fron) {
      //               
      QueuePtr tmp = LQ->fron->next;
      //    
      delete LQ->fron;
      //       
      LQ->fron = tmp;
     }
     //           NIULL
     LQ->fron = LQ->rear = 0;
     //      NULL
     LQ->length = 0;
     return true;
    }
    3.1      :
    	          LQ->length
    
    //        
    bool GetLength(LinkQueue* LQ) {
     if (!LQ) return false;
     //    length
     return LQ->length;
    }
    
        :
    
    //  
    void Print(LinkQueue* LQ) {
     QueuePtr tmp;
     if (!LQ) return;
     //       tmp
     tmp = LQ->fron;
     while (tmp) {
      //    
      cout << setw(4) << tmp->data;
      //         
      tmp = tmp->next;
     }
     cout << endl;
    }
    
    main:
    
    
    int main(void) {
     LinkQueue* LQ = new LinkQueue;
     DataType data = -1;
    
    //   
     InitQueue(LQ);
    
    //   
     for(int i=0; i<7; i++){ 
      EnterQueue(LQ, i); 
     }
    
    //        
     cout << "       << GetLength(LQ) << " >" << endl;
     Print(LQ);
     cout << endl;
    
    //  
     for (int i = 0; i < 7; i++) {
      if (DeleteQueue(LQ, &data)) {
       cout << "      :" << data << endl;
      }
      else {
       cout << "    !" << endl;
      }
     }
    
    //        
     cout << "      :" << GetLength(LQ) << " " << endl;
     Print(LQ);
     cout << endl;
    
    if (ClearQueue(LQ)) {
      cout << "      !" << endl;
     }
     else {
      cout << "      " << endl;
     }
     Print(LQ);
    
    //    
    delete LQ;
    
    system("pause");
     return 0;
    }
    

    좋은 웹페이지 즐겨찾기