首页 > 学院 > 开发设计 > 正文

队列

2019-11-08 03:14:28
字体:
来源:转载
供稿:网友

   队列特性:先进先出(FIFO)——先进队列的元素先出队列。

  队列有下面几个操作:

InitQueue()    ——初始化队列EnQueue()          ——进队列DeQueue()          ——出队列IsQueueEmpty() ——判断队列是否为空IsQueueFull()     ——判断队列是否已满

     队列数据结构:

   typedef struct queue  {          int queuesize;   //数组的大小          int head, tail;  //队列的头和尾下标          int *q;          //数组头指针  }Queue;

InitQueue()   ——初始化队列

void InitQueue(Queue *Q){        Q->queuesize = 8;        Q->q = (int *)malloc(sizeof(int) * Q->queuesize); //分配内存        Q->tail = 0;        Q->head = 0;}

这样有个缺陷,空间利用率不高。采用循环队列:

EnQueue() ——进队列

void EnQueue(Queue *Q, int key){        int tail = (Q->tail+1) % Q->queuesize; //取余保证,当quil=queuesize-1时,再转回0        if (tail == Q->head)                   //此时队列没有空间        {            PRintf("the queue has been filled full!");        }        else        {            Q->q[Q->tail] = key;            Q->tail = tail;        }}

DeQueue() ——出队列

int DeQueue(Queue *Q){        int tmp;        if(Q->tail == Q->head)     //判断队列不为空        {            printf("the queue is NULL/n");        }        else        {            tmp = Q->q[q->head];            Q->head = (Q->head+1) % Q->queuesize;        }        return tmp;}

IsQueueEmpty()——判断队列是否为空

int IsQueueEmpty(Queue *Q){        if(Q->head == Q->tail)        {            return 1;        }        else        {            return 0;        }}

IsQueueFull()——判断队列是否已满

int IsQueueFull(Queue *Q){    if((Q->tail+1)% Q->queuesize == Q->head)    {        return 1;    }    else    {        return 0;      }} 
上一篇:linux常用命令

下一篇:数塔 HDU - 2084

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表