头歌,队列
一
// 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);
}
}