C语言数据结构——线性表循环队列(静态数组实现方式)

2020-01-07  本文已影响0人  含光印象

队列相关知识及操作请参看上一章

C语言数据结构——线性表循环队列(动态数组实现方式)

一、队列数据类型定义

#define QUEUE_ZISE          6//队列长度

typedef struct Queue
{
    int qFront;//队首
    int qRear;//队尾
    int BasicArr[QUEUE_ZISE];//队列数据
}Queue, * pQueue;
//Queue  等效于 struct Queue 
//pQueue 等效于 struct Queue *

二、队列初始化

队列初始化
//初始化队列
void InitQueue(pQueue queue)
{
    queue->qFront = 0;
    queue->qRear  = 0;

    printf("队列初始化成功......\r\n");
    printf("队列总长度 : %d\r\n", (QUEUE_ZISE - 1));
    printf("队首 : %d\r\n", queue->qFront);
    printf("队尾 : %d\r\n", queue->qRear);
}

三、判断队列是否为空

队列为空
//队列是否为空
bool IsEmptyQueue(pQueue queue)
{
    if (queue->qFront == queue->qRear)//队首等于队尾
        return true;
    else
        return false;
}

四、判断队列是否已满

队列已满
//队列是否为满
bool IsFullQueue(pQueue queue)
{
    //队尾下个数据为队首
    if (((queue->qRear + 1) % QUEUE_ZISE) == queue->qFront)
        return true;
    else
        return false;
}

五、数据入队

数据入队
//入队
void EnterQueue(pQueue queue, int vale)
{
    if (IsFullQueue(queue))
    {
        printf("队列已满,入队失败......\r\n");
        return;
    }

    //从队尾入队
    queue->BasicArr[queue->qRear] = vale;//入队数据
    queue->qRear = (queue->qRear + 1) % QUEUE_ZISE;//队尾移向下个位置

    printf("入队成功!入队值为:%d   ---->    ", vale);
    printf("队首: %d   队尾: %d\r\n", queue->qFront, queue->qRear);
}

六、数据出队

数据出队
//出队
int OutQueue(pQueue queue)
{
    int out = 0;

    if (IsEmptyQueue(queue))
    {
        printf("队列已空,出队失败......\r\n");
        return out;
    }

    out = queue->BasicArr[queue->qFront];//出队值
    queue->qFront = (queue->qFront + 1) % QUEUE_ZISE;//指向下一个出队值

    printf("出队成功!出队值为:%d   ---->    ", out);
    printf("队首: %d   队尾: %d\r\n", queue->qFront, queue->qRear);

    return  out;
}

七、遍历队列

//显示队列数据
void ShowQueue(pQueue queue)
{
    int cur = 0;

    if (IsEmptyQueue(queue))
    {
        printf("队列为空,显示失败......\r\n");
        return;
    }

    printf("队列数据: ");
    cur = queue->qFront;
    while (cur != queue->qRear)
    {
        printf("%d  ", queue->BasicArr[cur]);
        cur = (cur + 1) % QUEUE_ZISE;
    }
    printf("\r\n");
}

八、获取队列使用空间

//队列使用空间
int CountQueue(pQueue queue)
{
    int cur = 0;
    int len = 0;

    cur = queue->qFront;
    while (cur != queue->qRear)
    {
        len++;
        cur = (cur + 1) % QUEUE_ZISE;
    }

    printf("队列使用空间 : %d\r\n", len);
    return len;
}

九、获取队列剩余空间

//队列剩余空间
int ResidueQueue(pQueue queue)
{
    int len = 0;
    int cur = 0;
    int res = 0;

    cur = queue->qFront;
    while (cur != queue->qRear)
    {
        len++;
        cur = (cur + 1) % QUEUE_ZISE;
    }

    res = QUEUE_ZISE - 1 - len;
    printf("队列剩余空间 : %d\r\n", res);
    return res;
}

十、代码验证演示

void main(void)
{
    Queue queue;

    InitQueue(&queue);//初始化队列
    printf("\r\n");
    
    EnterQueue(&queue, 10);//入队
    EnterQueue(&queue, 20);
    EnterQueue(&queue, 30);
    EnterQueue(&queue, 40);
    EnterQueue(&queue, 50);
    CountQueue(&queue);//队列使用空间
    ResidueQueue(&queue);//队列剩余空间
    ShowQueue(&queue);//显示队列数据
    printf("\r\n");

    OutQueue(&queue);//出队
    OutQueue(&queue);
    OutQueue(&queue);
    CountQueue(&queue);//队列使用空间
    ResidueQueue(&queue);//队列剩余空间
    ShowQueue(&queue);//显示队列数据
    printf("\r\n");

    while (1);
}

十一、运行结果

队列初始化成功......
队列总长度 : 5
队首 : 0
队尾 : 0

入队成功!入队值为:10   ---->    队首: 0   队尾: 1
入队成功!入队值为:20   ---->    队首: 0   队尾: 2
入队成功!入队值为:30   ---->    队首: 0   队尾: 3
入队成功!入队值为:40   ---->    队首: 0   队尾: 4
入队成功!入队值为:50   ---->    队首: 0   队尾: 5
队列使用空间 : 5
队列剩余空间 : 0
队列数据: 10  20  30  40  50

出队成功!出队值为:10   ---->    队首: 1   队尾: 5
出队成功!出队值为:20   ---->    队首: 2   队尾: 5
出队成功!出队值为:30   ---->    队首: 3   队尾: 5
队列使用空间 : 2
队列剩余空间 : 3
队列数据: 40  50
运行结果1 运行结果2 运行结果3 运行结果4 运行结果5
上一篇下一篇

猜你喜欢

热点阅读