0
点赞
收藏
分享

微信扫一扫

【educoder】数据结构-队列的应用

杏花疏影1 2022-04-29 阅读 82

目录

一、第1关:循环队列

二、第2关:链队列

三、第3关:单链表循环队列

四、作者有话说:


一、第1关:循环队列

//
//  queue_.cpp
//  Queue
//
//  Created by ljpc on 2018/5/29.
//  Copyright © 2018年 ljpc. All rights reserved.
//

#include "queue_.h"


void creatQueue(Queue* que, int maxSize)
//  创建一个循环队列指针que,队列最大长度为maxSize
{
    que->maxSize = maxSize;
    que->data = (int*)malloc(maxSize * sizeof(int));
    que->front = que->rear = 0;
}

void destroyQueue(Queue* que)
//  释放队列内存空间
{
    free(que->data);
}

bool isFull(Queue* que)
//  判断队列que是否为满
//  若满返回 true 并在一行打印 The queue is Full 末尾换行!!!
//  否则返回 false
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    if((que->rear+1)%que->maxSize==que->front)
    {
        printf("The queue is Full\n");
        return true;
    }
    return false;
    /********** End **********/
}

bool isEmpty(Queue* que)
//  判断队列que是否为空
//  若空返回 true 并在一行打印 The queue is Empty 末尾换行!!!
//  否则返回 false
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    if(que->front==que->rear)
    {
        printf("The queue is Empty\n");
        return true;
    }
    return false;
    /********** End **********/
}

int enQueue(Queue* que, int item)
//  实现入队操作:将元素item加入队列que尾部
//  若队列没满,编写加入操作,返回 1
//  若队列满了,不做任何操作,返回 -1
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    if(isFull(que))
    {
        return -1;
    }
    else
    {
        que->data[que->rear]=item;
        que->rear=(que->rear+1)%que->maxSize;
        return 1;
    }
    /********** End **********/
}

int deQueue(Queue* que)
//  实现出队操作:移除队列que首部元素,并返回元素值
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    int p;
    if(que->front!=que->rear)
    {
        p=que->data[que->front];
        que->front=(que->front+1)%que->maxSize;
        return p;
    }
    return 0;
    /********** End **********/
}

void printQueue(Queue* que)
//  打印队列
{
    while (isEmpty(que)==false) {
        int item = deQueue(que);
        printf("%d ", item);
    }
}

二、第2关:链队列

//
//  queue_.cpp
//  LinkQueue
//
//  Created by ljpc on 2018/5/30.
//  Copyright © 2018年 ljpc. All rights reserved.
//

#include "queue_.h"

void creatLinkQueue(LinkQueue* que)
//  创建一个循环队列指针que
{
    que->front = (Node*)malloc(sizeof(Node));
    que->rear = que->front;
    que->rear->next = NULL;
}

bool isEmpty(LinkQueue* que)
//  判断队列que是否为空
//  若空返回 true 并在一行打印 The queue is Empty 末尾换行!!!
//  否则返回 false
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    if(que->front==que->rear)
    {
        printf("The queue is Empty\n");
        return true;
    }
    return false;
    /********** End **********/
}

void enQueue(LinkQueue* que, int item)
//  实现入队操作:将元素item加入队列que尾部
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    Node *newnode = (Node*)malloc(sizeof(Node));
    newnode->data=item;
    newnode->next=NULL;
    que->rear->next=newnode;
    que->rear=newnode;
    /********** End **********/
}

int deQueue(LinkQueue* que)
//  实现出队操作:移除队列que首部元素,并返回元素值
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
        Node *node =que->front->next;
        que->front->next=node->next;
        if(que->rear==node)
        {
            que->rear=que->front;
        }
        return node->data;
    /********** End **********/
}

void printQueue(LinkQueue* que)
//  打印队列
{
    while (isEmpty(que)==false) {
        int item = deQueue(que);
        printf("%d ", item);
    }
}




三、第3关:单链表循环队列

//
//  queue_.cpp
//  Cycle
//
//  Created by ljpc on 2018/5/30.
//  Copyright © 2018年 ljpc. All rights reserved.
//

#include "queue_.h"


void creatCycleQueue(CycleQueue* que)
//  创建一个循环队列指针que
{
    que->size_ = 0;
    que->rear = NULL;
}

bool isEmpty(CycleQueue* que)
//  判断队列que是否为空
//  若空返回 true 并在一行打印 The queue is Empty 末尾换行!!!
//  否则返回 false
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    if(que->size_==0)
    {
        printf("The queue is Empty\n");
        return true;
    }
    return false;
    /********** End **********/

}

void enQueue(CycleQueue* que, int item)
//  实现入队操作:将元素item加入队列que尾部
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    Node*newnode=(Node*)malloc(sizeof(Node));
    if(que->size_==0)
    {
        que->rear=newnode;
        que->rear->next=newnode;
    }
    else
    {
        Node *temp = que->rear->next;  
        que->rear->next = newnode;  
        newnode->next = temp;  
        que->rear=newnode;
        que->rear->next=temp;
    }
    newnode->data=item;
    que->size_++;
    /********** End **********/

}

int deQueue(CycleQueue* que)
//  实现出队操作:移除队列que首部元素,并返回元素值
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    Node*node=que->rear->next;
    que->rear->next=node->next;
    que->size_--;
    return node->data;
    /********** End **********/

}

void printQueue(CycleQueue* que)
//  打印队列
{
    while (isEmpty(que)==false) {
        int item = deQueue(que);
        printf("%d ", item);
    }
}

四、作者有话说:

作者也是菜鸟,也有很多题目需要翻阅大佬的博客,最初发这些的初衷就是为了帮助那些刚入门的朋友能更好的做题,所以请不要直接复制抄袭,要自己尝试去做!!!

举报

相关推荐

0 条评论