Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

队列

JLNU-七月 2019-12-02 21:20:00 阅读数:12 评论数:0 点赞数:0 收藏数:0

1、队列的定义
队列,简称队,它是一种操作受限的线性表,其限制在表的一端进行插入,另一端进行删除。可进行插入的一端称为队尾(rear),可进行删除的一端称为队头(front)。向队中插入元素叫入队,新元素进入之后就称为新的队尾元素。从队中删除元素叫出队,元素出队后,其后继结点元素就称为新的队头元素。
2、队列的特点
队的特点就是先进先出(栈为先进后出)。排队买票,排在前面的,先拿到票,排在后面的必须等待着前面买完票,才能轮到他买票。
3、队列的存储结构
队列按存储结构可分为链队和顺序队两种。

先说一下顺序队列,如图:

 

代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef struct
{
    int data[];
    int front;
    int rear;
}SeqQueue;
void Init(SeqQueue *q)      //置空队列
{
    q->front=q->rear=-;
}
int EmptyQueue(SeqQueue *q)  //判断队列是否为空
{
    if(q->front==q->rear)
        return ;
    else
        return ;
}
int  InQueue(SeqQueue *q,int x)  //进行入队
{
    if(q->rear==-)
    {
        printf("队列已经满了!\n");
        return ;
    }
    q->rear++;
    q->data[q->rear]=x;
    return ;
}
int OutQueue(SeqQueue *q)      //进行出队
{
    if(q->front<)
    {
        printf("队列已经为空!\n");
        return ;
    }
    q->front++;
    return q->data[q->front];
}
int main()
{
    SeqQueue *q;
    q=(SeqQueue *)malloc(sizeof(SeqQueue));
    for(int i=;i<=;i++)
    {

        InQueue(q,i);
    }
    for(int i=;i<=;i++)
    {
        printf("%d ",OutQueue(q));

    }
}

循环队列:

        满:当队列添加元素到rear的下一个元素是front的时候,也就是转圈子要碰头了,我们就认为队列满了。(Q.rear+1)%MAXSIZE=Q.front

        空:当队列删除元素到front=rear的时候,我们认为队列空了。Q.rear==Q.front,不一定为0

  图示:

 

 代码实现:

#include<bits/stdc++.h>
using namespace std;
#define MAX 105
typedef struct
{
    int data[MAX];
    int front;
    int rear;
}SeqQueue;
void Init(SeqQueue *q)      //置空
{
    q->front=q->rear=-;

}
int EmptyQueue(SeqQueue *q)   //判断是否为空
{
    if(q->rear==q->front)
        return  ;
    else
        return  ;
}
int InQueue(SeqQueue *q,int x)    //进队
{
    if((q->rear+)%MAX==q->front)
    {
        printf("循环队列已经满了!\n");
        return ;
    }
    q->rear=(q->rear+)%MAX;
    q->data[q->rear]=x;
    return ;
}
int OutQueue(SeqQueue *q)     //出队
{
    if(q->rear==q->front)
    {
        printf("队已经为空!\n");
        return ;
    }
    q->front=(q->front+)%MAX;
    return q->data[q->front];

}
int main()
{
    SeqQueue *q;
    q=(SeqQueue *)malloc(sizeof(SeqQueue));
    for(int i=;i<=;i++)
    {
        InQueue(q,i);
    }
    for(int i=;i<=;i++)
    {
        printf("%d ",OutQueue(q));

    }
}

 

 

版权声明
本文为[JLNU-七月]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/julyzqy/p/11973367.html