데이터 구조 학습 - 대기 열

대기 열 초기 화, 요소 삽입, 헤더 요소 삭제, 대기 열 비우 기, 대기 열 탐색, 대기 열 삭제
 #include /* malloc()  */
 #include /* EOF(=^Z F6),NULL */
 #include /* floor(),ceil(),abs() */
 #include /* exit() */

 #define TRUE 1
 #define FALSE 0
 #define OK 1
 #define ERROR 0
 #define INFEASIBLE -1
typedef int Status; /* Status      ,           , OK  */
typedef int QElemType;

 typedef struct QNode
 {
   QElemType data;
   struct QNode *next;
 }QNode,*QueuePtr;

 typedef struct
 {
   QueuePtr front,rear; /*   、     */
 }LinkQueue;
 
  Status InitQueue(LinkQueue *Q)
 { /*        Q */
   (*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode));
   if(!(*Q).front)
     exit(OVERFLOW);
   (*Q).front->next=NULL;
   return OK;
 }
 
  Status EnQueue(LinkQueue *Q,QElemType e)
 { /*     e Q        */
   QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
   if(!p) /*        */
     exit(OVERFLOW);
   p->data=e;
   p->next=NULL;
   (*Q).rear->next=p;
   (*Q).rear=p;
   return OK;
 }
 
 //     
  Status QueueTraverse(LinkQueue Q)
 { 
   QueuePtr p;
   p=Q.front->next;
   while(p)
   {
     printf("%d",p->data); 
     p=p->next;
   }
   printf("
"
); return OK; } /* */ int QueueLength(LinkQueue Q) { int i=0; QueuePtr p; p=Q.front; while(Q.rear!=p) { i++; p=p->next; } return i; } /* , e Q , OK, ERROR */ Status GetHead_Q(LinkQueue Q,QElemType *e) { QueuePtr p; if(Q.front==Q.rear) return ERROR; p=Q.front->next; *e=p->data; return OK; } /* , Q , e , OK, ERROR */ Status DeQueue(LinkQueue *Q,QElemType *e) { QueuePtr p; if((*Q).front==(*Q).rear) return ERROR; p=(*Q).front->next; *e=p->data; (*Q).front->next=p->next; if((*Q).rear==p) (*Q).rear=(*Q).front; free(p); return OK; } /* Q */ Status ClearQueue(LinkQueue *Q) { QueuePtr p,q; (*Q).rear=(*Q).front; p=(*Q).front->next; (*Q).front->next=NULL; while(p) { q=p; p=p->next; free(q); } return OK; } /* Q( ) */ Status DestroyQueue(LinkQueue *Q) { while((*Q).front) { (*Q).rear=(*Q).front->next; free((*Q).front); (*Q).front=(*Q).rear; } return OK; } int main() { QElemType d; LinkQueue q; InitQueue(&q); // int i; for(i=1;i<=10;i++) EnQueue(&q,i); printf(" %d
"
,QueueLength(q)); QueueTraverse(q); printf(" :%d
"
,GetHead_Q(q,&d)); DeQueue(&q,&d); printf(" %d
"
,d); GetHead_Q(q,&d); printf(" :%d
"
,d); ClearQueue(&q); printf(" ,q.front=%u q.rear=%u q.front->next=%u
"
,q.front,q.rear,q.front->next); DestroyQueue(&q); printf(" ,q.front=%u q.rear=%u
"
,q.front, q.rear); }

좋은 웹페이지 즐겨찾기