队列-基本操作(C版)

队列也是表,使用队列时,插入在一端进行,而删除在另一端进行。

常用的操作:

[cpp] view plain copy
 
  1. /**是否为空队列**/  
  2.   
  3. int isEmpty(Queue q)  
  4.   
  5. /**队列是否已满**/  
  6.   
  7. int isFull(Queue q)  
  8.   
  9. /**实现循环队列,重置rear或者front**/  
  10.   
  11. int circularQ(int index,Queue q)  
  12.   
  13. /*入列*/  
  14.   
  15. void enQueue(Queue q,int item)  
  16.   
  17. /*出列*/  
  18.   
  19. int deQueue(Queue q)  
  20.   
  21. /**取队列头元素**/  
  22.   
  23. int front(Queue q)  

 

Queue.c

 

[cpp] view plain copy
 
    1. #include <stdio.h>  
    2. #include <stdlib.h>  
    3.   
    4. typedef struct QueueRec{  
    5.     int front;  
    6.     int rear;  
    7.     int size;//队列元素个数  
    8.     int capacity;//队列大小  
    9.     int *Array;  
    10. } lqueue,*Queue;  
    11.   
    12. int isEmpty(Queue q){  
    13.     return q->size==0;  
    14. }  
    15.   
    16. int isFull(Queue q){  
    17.     return q->size==q->capacity;  
    18. }  
    19.   
    20. Queue createQueue(int capacity){  
    21.     Queue queue;  
    22.     queue = (Queue)malloc(sizeof(lqueue));  
    23.     if(queue==NULL){  
    24.         return NULL;  
    25.     }  
    26.     queue->Array = malloc(sizeof(int)*capacity);  
    27.     if(queue->Array == NULL ){  
    28.         return NULL;  
    29.     }  
    30.     queue->capacity = capacity;  
    31.     queue->size = 0;  
    32.     queue->front = 0;  
    33.     queue->rear = -1;  
    34.     return queue;  
    35. }  
    36.   
    37. void makEmpty(Queue q){  
    38.     q->size = 0;  
    39.     q->rear = -1;  
    40.     q->front = 0;  
    41. }  
    42.   
    43. void disPoseQueue(Queue q){  
    44.     if(q!=NULL){  
    45.         free(q);      
    46.     }  
    47. }  
    48.   
    49. /**这个方法实现循环队列,当rear到达尾端(入列),或者front到达尾端(出列),它又回到开头**/  
    50. int circularQ(int index,Queue q){  
    51.     if(++index > q->capacity){  
    52.         return 0;  
    53.     }  
    54.     return index;  
    55. }  
    56.   
    57. /*入列*/  
    58. void enQueue(Queue q,int item){  
    59.     if(isFull(q)){  
    60.         printf("Queue is Full\n");  
    61.     } else {  
    62.         q->size ++;  
    63.         q->rear = circularQ(q->rear,q);  
    64.         q->Array[q->rear] = item;  
    65.     }  
    66. }  
    67.   
    68. /*出列*/  
    69. int deQueue(Queue q){  
    70.     int temp;  
    71.     if(isEmpty(q)){  
    72.         printf("queue is Empty\n");  
    73.     } else {  
    74.         q->size --;  
    75.         temp = q->Array[q->front];  
    76.         q->front = circularQ(q->front,q);  
    77.     }  
    78.     return temp;  
    79. }  
    80.   
    81. /**取队列头元素**/  
    82. int front(Queue q){  
    83.     return q->Array[q->front];  
    84. }  
    85.   
    86. int main(void){  
    87.     Queue q = createQueue(5);  
    88.     enQueue(q,1);  
    89.     enQueue(q,2);  
    90.     enQueue(q,3);  
    91.     enQueue(q,4);  
    92.     enQueue(q,5);  
    93.     enQueue(q,6);  
    94.     printf("%d\n",front(q));  
    95.     printf("%d\n",deQueue(q));  
    96.     printf("%d\n",deQueue(q));  
    97.     enQueue(q,7);  
    98.     printf("%d\n",front(q));  
    99.     disPoseQueue(q);  
    100.     return -1;  
    101. }  
posted @ 2017-02-16 11:58  N神3  阅读(117)  评论(0编辑  收藏  举报