目录
一、第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);
}
}
四、作者有话说:
作者也是菜鸟,也有很多题目需要翻阅大佬的博客,最初发这些的初衷就是为了帮助那些刚入门的朋友能更好的做题,所以请不要直接复制抄袭,要自己尝试去做!!!