数据结构-队列-数组

队列的定义:队列是一种特殊的线性表,只允许在表的头部(front处)进行删除操作,在表的尾部(rear处)进行插入操作的线性数据结构,这种结构就叫做队列。进行插入操作的一端称为队尾,进行删除操作的一端称为队头。

数组实现的队列会定义一段空间用于存放数据,另外一个front队头指针,一个rear队尾指针,队头指针指向队列的第一个元素,队尾指针指向队列最后一个元素的下一位。数据入队列时,队尾指针增加一位,出队列时,队头指针增加一位。

队列一般设计成循环队列,因为如果是非循环队列的话,进行数据插入、删除时,front、rear指针会一直增加,之前的位置就无法在使用到,会造成浪费。所以接下来我们就实现循环队列。

队列结构体:

typedef struct 
{
    ElemType *elem;    //存放数据内容
    int front;    //队列头
    int rear;    //队列尾
    int maxSize;    //队列大小
}QUEUE_SQ;

非循环队列: 

数据结构-队列-数组_第1张图片

循环队列:

数据结构-队列-数组_第2张图片

 

接口:

//初始化队列
void InitQueue(QUEUE_SQ &sq, int size);
//判断队列是否为空
bool isEmptyQueue(QUEUE_SQ sq);
//入队列
void PushQueue(QUEUE_SQ &sq, int elem);
//出队列
void PopQueue(QUEUE_SQ &sq);
//获取队列最前面数据
ElemType GetRearElem(QUEUE_SQ sq);
//获取队列元素个数
int GetNumElem(QUQUE_SQ sq);
#include 
#include 
#include 
#include 
#include 
using std::cout;
using std::endl;
typedef int ElemType;
typedef struct
{
    ElemType *elem;
    int front;
    int rear;
    int maxSize;
}QUEUE_SQ;
//初始化队列
void InitQueue(QUEUE_SQ &sq, int size)
{
    sq.elem = (ElemType *)malloc(size * sizeof(ElemType));
    sq.front = 0;
    sq.rear = 0;
    sq.maxSize = size;
}
//判断队列是否为空
bool isEmptyQueue(QUEUE_SQ sq)
{
    if(sq.front == sq.rear) 
        return true;
    return false;
}
//判断队列是否满
bool isFullQueue(QUEUE_SQ sq)
{
    if( (sq.rear + 1)%(sq.maxSize) == sq.front )
        return true;
    return false;
}
//入队列
void PushQueue(QUEUE_SQ &sq,int elem)
{
    if(isFullQueue(sq))
    {
        cout<<"queue is full!"<

打印结果:

push queue:10
push queue:20
push queue:30
num elem:3
pop stack:10
pop stack:20
pop stack:30
queue is empty!
num elem:0

 

你可能感兴趣的:(数据结构)