队列的创建及其操作

一·链队列:

1.队尾进入,队头出的链表
2.结构包含:

  1. 节点结构:节点数据,next指针。
  2. 队列结构:节点队头指针,节点队尾指针。

实现:

#include<iostream>
#include<stdlib.h>
using namespace std;
typedef int ElemType;
typedef int Status;
#define MAXSIZE 50
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef struct QNode
{
    ElemType data;
    struct QNode * next;
}QNode,*QNodeP;
typedef struct
{
    QNodeP front;
    QNodeP rear;
}LinkQ;
//初始化:
Status InitQueue(LinkQ &Q)
{
    Q.front = Q.rear = new QNode;
    if(!Q.front)
    exit(OVERFLOW);
    Q.front->next = NULL;
    return OK;
}
//判断是否为空队:
Status QueueEmpty(LinkQ Q)
{
    if(Q.front == Q.rear)
        return OK;
    else
        return ERROR;
}
//入队:尾在动
Status EnQueue(LinkQ &Q,ElemType e)
{
    QNodeP p = new QNode;
    if(!p)
        exit(OVERFLOW);
    p->data = e;
    p->next = NULL;
    Q.rear->next = p;
    Q.rear = p;
    return OK;
}
//出队:前在动
Status DeQueue(LinkQ &Q,ElemType &e)
{
    QNodeP p;
    if(QueueEmpty(Q))
        return ERROR;
    p = Q.front->next;
    e = p->data;
    Q.front->next = p->next;
    if(Q.rear == p)
    Q.rear = Q.front;
    delete(p);
    p == NULL;
    return OK;
}

二·循环队列:

1.如果使用普通顺序队列,弊端很多,采用循环队列加以优化。
2.结构包含:队列元素数组,头下标,尾下标。
实现:

#include <iostream>
#include <stdlib.h>
using namespace std;
#define OVERFLOW -2
#define ERROR 0
#define OK 1
typedef int Status;
typedef int QElemType;
#define Maxsize 100
//队列定义:
typedef struct
{
    QElemType elem[Maxsize];//队列数组
    int front,rear;//头尾下标
}SqQueue;
//初始化:
Status InitQueue(SqQueue &Q)
{
    Q.front=Q.rear=0;
    return OK;
}
//!!!队长:
int QueueLength(SqQueue Q)
{
    return (Q.rear-Q.front+Maxsize)%Maxsize;   //队伍查长度算法  
 //一段Maxsize-front,一段0+rear,在进行整合
}
//入队:
Status EnQueue(SqQueue &Q,QElemType e)
{
        if((Q.rear+1)%Maxsize==Q.front)   //判断队满(留一个空位)
                return ERROR;             //尾下标差1个追上头下标
        Q.elem[Q.rear]=e;
  	Q.rear=(Q.rear+1)%Maxsize;
        return OK;
}
//出队:
Status DeQueue(SqQueue &Q,QElemType &e)
{
        if(Q.front==Q.rear)               //判断队空
                return ERROR;
        e=Q.elem[Q.front];
        Q.front=(Q.front+1)%Maxsize;
  	return OK;
}
posted @ 2019-12-03 12:54  LASER_06  阅读(45)  评论(0)    收藏  举报