• QUEUE——队列(procedure)


    #include <stdio.h>
    #include <stdlib.h>
    #include "queue.h"

    int main()
    {
     int i;
     Type x;
     Type arr[] = {3,1,2,5,7,9};
     QUEUE *q = NULL;

     q = CreateQueue(10);
     if(NULL == q)
      return -1;
     
     for(i = 0; i < sizeof(arr)/sizeof(*arr); i++)
     {
      EnQueue(q, arr + i);
     }
     FrontQueue(q, &x);
     printf("x = %d ", x);

     DisptoryQueue(q);
     return 0;
    }
    ---------------------------------------------------------------

    #ifndef _QUEUE_H__
    #define _QUEUE_H__

    struct node;
    typedef int Type;
    typedef struct node QUEUE;

    QUEUE *CreateQueue(int);
    void QueueMakeEmpty(QUEUE *);
    int QueueIsEmpty(QUEUE *);
    int QueueIsFull(QUEUE *);
    int EnQueue(QUEUE *, const Type *);
    int DeQueue(QUEUE *);
    int FrontQueue(QUEUE *, Type *);
    int FrontAndDeQueue(QUEUE *, Type *);
    void DisptoryQueue(QUEUE *);

    struct node{
     Type *data;
     int capacity;
     int front;
     int rear;
     int size;
    };

    #endif
    -------------------------------------------------------------------

    #include <stdio.h>
    #include <stdlib.h>
    #include "queue.h"

    QUEUE *CreateQueue(int size)
    {
     QUEUE *q = malloc(sizeof(*q));
     if(NULL == q)
      return NULL;
     q->data = malloc(sizeof(Type)*size); //队列的长度,队列的成员个数
     if(NULL == q->data)
     {
      free(q);
      return NULL;
     }
     q->capacity = size; //队列容量
     QueueMakeEmpty(q);
     return q;
    }
    void QueueMakeEmpty(QUEUE *q)
    {
     q->size = 0;
     q->front = 1;
     q->rear = 0;
    }
    int QueueIsEmpty(QUEUE *q)
    {
     return q->size == 0;
    }
    int QueueIsFull(QUEUE *q)
    {
     return q->size == q->capacity;
    }
    static int repeat(QUEUE *q, int rear) //队列队尾入队,
    {
     if(++rear == q->capacity)
      rear = 0;
     return rear;
    }
    int EnQueue(QUEUE *q, const Type *x)
    {
     if(QueueIsFull(q))
      return -1;
     q->rear = repeat(q, q->rear); //每次入队成功后,队尾rear置0.
     q->data[q->rear] = *x;
     q->size++;
     return 0;
    }
    int DeQueue(QUEUE *q) //出队
    {
     if(QueueIsEmpty(q))
      return -1;
     q->front = repeat(q, q->front);
     q->size--;
     return 0;
    }
    int FrontQueue(QUEUE *q, Type *x) //查看队首
    {
     if(QueueIsEmpty(q))
      return -1;
     *x = q->data[q->front];
     return 0;
    }
    int FrontAndDeQueue(QUEUE *q, Type *x) //查看队首并出队
    {
     if(FrontQueue(q, x) == 0)
      return DeQueue(q);
     return -1;
    }
    void DisptroyQueue(QUEUE *q)
    {
     free(q->data);
     free(q);
    }

  • 相关阅读:
    [Noip2010]乌龟棋
    vijos次小生成树
    hdu3579-Hello Kiki-(扩展欧几里得定理+中国剩余定理)
    hdu1573-X问题-(扩展欧几里得定理+中国剩余定理)
    poj2115-Looooops-(扩展欧几里得定理)
    hdu2669-Romantic-(扩展欧几里得定理)
    poj1061-青蛙的约会-(贝祖定理+扩展欧几里得定理+同余定理)
    hdu1576-A/B-(同余定理+乘法逆元+费马小定理+快速幂)
    hdu4497-GCD and LCM-(欧拉筛+唯一分解定理+组合数)
    hdu3189-Just Do It-(埃氏筛+唯一分解定理)
  • 原文地址:https://www.cnblogs.com/riskyer/p/3356280.html
Copyright © 2020-2023  润新知