2021-11-04

头歌,队列


// 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;
}else
return false;

/********** End **********/

}

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

/********** End **********/

}

int enQueue(Queue* que, int item)
// 实现入队操作:将元素item加入队列que尾部
// 若队列没满,编写加入操作,返回 1
// 若队列满了,不做任何操作,返回 -1
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
if(((que->rear+1)%que->maxSize)==que->front){
printf(“The queue is Full\n”);
return -1;
}

que->data[que->rear] = item;
que->rear = (que->rear+1)%que->maxSize;
return 1;
/********** End **********/

}

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

/********** End **********/

}

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

//
//  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->rear == que->front){
        printf("The queue is Empty\n");
        return true;
    }
    return false;

    /********** End **********/
}

void enQueue(LinkQueue* que, int item)
//  实现入队操作:将元素item加入队列que尾部
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    Node* node = (Node*)malloc(sizeof(Node));   //申请结点空间
    if(!node)
        exit(0);
    node->data =item;       //为新结点赋值
    node->next = NULL;
    que->rear->next = node;   //队尾指针指向新结点 
    que->rear = node;       //队尾指向新入队结点
    /********** End **********/
}

int deQueue(LinkQueue* que)
//  实现出队操作:移除队列que首部元素,并返回元素值
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    if(que->rear == que->front){    //队为空
        printf("The queue is Empty\n");
        return -1;
    }
    int item;
    Node* node = que->front->next;  //node指向队中第一个结点
    item = node->data;         //取出结点数据
    que->front->next = node->next;  //头结点指针指向第2个结点
    if(que->rear == node)   //队只有一个结点时,出队后为空队
        que->rear = que->front;
    free(node);
    return item;

    /********** End **********/
}

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

//
//  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* node = (Node*)malloc(sizeof(node));
    node->data = item;
    node->next = NULL;
    if(que->size_==0){  //如果队为空
        que->rear = node;
        que->rear->next = node;
        que->size_++;
    }else{  //非空
        Node *temp = que->rear->next;
        que->rear->next = node;
        node->next = temp;
        que->rear = node;
        que->rear->next = temp;
        que->size_++;
    }

    /********** End **********/

}

int deQueue(CycleQueue* que)
//  实现出队操作:移除队列que首部元素,并返回元素值
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    if(que->size_ == 0){
        printf("The queue is Empty\n");
        return -1;
    }
    int item;
    Node *node = que->rear->next;
    item = node->data;
    que->rear->next = node->next;
    que->size_--;
    free(node);
    return item;
    /********** End **********/

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值