码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构之队列

时间:2018-03-29 22:35:59      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:队列   gpo   int   mil   pre   内容   family   ase   assert   

队列

    1.定义:队列是一种先进先出(FIFO)的线性表。它只允许在表的一端进行插入,而在另一端删除元素。

在队列中,允许插入的一端叫做队尾,允许删除的一端则称为队头。

    假设对列为q=(a1,a2,a3,...,an),那么a1就是队头元素,an则是队尾元素。队列中的元素是按照a1,a2

,...,an的顺序进入的,退出队列也只能按照这个次退出,也就是说,只有在a1,a2,...,an-1都离开队列之后,

an才能退出队列。那么其数据结构为:

#define ElemType int
#define QUEUE_INIT_SIZE 8

typedef struct Queue
{
    ElemType *base;
    int       capacity;
    int       front;
    int       rear;
}Queue;

        2.因此在队列中有以下操作:

void InitQueue(Queue *q);
void EnQueue(Queue *q, ElemType x);
void DeQueue(Queue *q);
ElemType GetTop(Queue *q);
void ShowQueue(Queue *q);
bool IsFull(Queue *q);
bool IsEmpty(Queue *q);

     以上的方法在队列中有以下操作:(1)初始化队列.(2)向队列中插入元素.(3)删除队列中的元素.(4)

得到队头元素.(5)展示队列中的内容.(6)判断对列是否是满状态.(7)判断队列是否是空状态.

   3.将上面声明的方法进行实现为:

bool IsFull(Queue *q)
{
    //return (q->rear-q->front) >= q->capacity;
    //return q->rear >= q->capacity;
    return (q->rear+1)%q->capacity == q->front;
}
bool IsEmpty(Queue *q)
{
    return q->front == q->rear;
}
void InitQueue(Queue *q)
{
    q->base = (ElemType*)malloc(sizeof(ElemType)*QUEUE_INIT_SIZE);
    assert(q->base != NULL);
    q->capacity = QUEUE_INIT_SIZE;
    q->front = q->rear = 0;
}
void EnQueue(Queue *q, ElemType x)
{
    if(!IsFull(q))
    {
        q->base[q->rear] = x;
        q->rear = (q->rear+1) % q->capacity;
    }
}

void ShowQueue(Queue *q)
{
    if(!IsEmpty(q))
    {
        for(int i=q->front; i!=q->rear; i=(i+1)%q->capacity)
        {
            cout<<q->base[i]<<" ==> ";
        }
        cout<<endl;
    }
}

void DeQueue(Queue *q)
{
    if(!IsEmpty(q))
    {
        q->front++;
        q->front = q->front % q->capacity;
    }
}

ElemType GetTop(Queue *q)
{
    assert(!IsEmpty(q));
    return q->base[q->front];
}

 

数据结构之队列

标签:队列   gpo   int   mil   pre   内容   family   ase   assert   

原文地址:https://www.cnblogs.com/XNQC1314/p/8672495.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!