第1关 循环队列
#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->front==que->rear)
{
printf("The queue is Empty\n");
return true;
}
else
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 *********/
if(isEmpty(que))
return 0;
else
{
int temp=que->data[que->front];
que->front=(que->front+1)%que->maxSize;
return temp;
}
/********** End **********/
}
void printQueue(Queue* que)
// 打印队列
{
while (isEmpty(que)==false) {
int item = deQueue(que);
printf("%d ", item);
}
}
第2关 链队列
#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;
}
else
return false;
/********** End **********/
}
void enQueue(LinkQueue* que, int item)
// 实现入队操作:将元素item加入队列que尾部
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
struct Node* newattr=(struct Node*)malloc(sizeof(struct Node));
newattr->data=item;
newattr->next=NULL;
que->rear->next=newattr;
que->rear=newattr;
/********** End **********/
}
int deQueue(LinkQueue* que)
// 实现出队操作:移除队列que首部元素,并返回元素值
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
if(!isEmpty(que))
{
struct Node* p;
int temp;
p=que->front->next;
que->front->next=p->next;
if(que->rear==p)
que->rear=que->front;//这里写反了 搞得我调试了好久 淦!
temp=p->data;
free(p);
return temp;
}
/********** End **********/
}
void printQueue(LinkQueue* que)
// 打印队列
{
while (isEmpty(que)==false) {
int item =deQueue(que);
printf("%d ", item);
}
}
第3关 单链表循环队列
#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_)
{
printf("The queue is Empty\n");
return true;
}
else
return false;
/********** End **********/
}
void enQueue(CycleQueue* que, int item)
// 实现入队操作:将元素item加入队列que尾部
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
struct Node *newattr=(struct Node*)malloc(sizeof(struct Node));
newattr->data=item;
if(que->size_!=0)
{
struct Node *temp=que->rear->next;
que->rear->next=newattr;
newattr->next=temp;
que->rear=newattr;
que->rear->next=temp;
que->size_++;
}
else
{
que->rear=newattr;
que->rear->next=newattr;
que->size_++;
}
/********** End **********/
}
int deQueue(CycleQueue* que)
// 实现出队操作:移除队列que首部元素,并返回元素值
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
if(que->size_!=0)
{
int temp;
struct Node *head=que->rear->next;
temp=head->data;
que->rear->next=head->next;
que->size_--;
return temp;
}
/********** End **********/
}
void printQueue(CycleQueue* que)
// 打印队列
{
while (isEmpty(que)==false) {
int item = deQueue(que);
printf("%d ", item);
}
}