文章类型为学习笔记,都是基本操作......
直接上代码......
#include<stdio.h>
#include<malloc.h>
/*队列的最大长度*/
#define MAX_QUEUE_SIZE 6
/*循环队列类型*/
typedef struct {
int *base;//循环队列存储空间
int front;//队头
int rear;//队尾
}Queue;
/*初始化队列,创建容量为MAX_QUEUE_SIZE的空队列*/
void InitQueue(Queue *Q){
printf("初始化循环队列......\n");
/*采用动态内存分配 malloc函数*/
/*分配MAX_QUEUE_SIZE个int类型的存储单元*/
/*并将这MAZ_QUEUE_SIZE个连续的int类型的存储单元的首地址存储到指针变量base中*/
/*malloc函数返回值为void* 需要使用(int*)强制转换 */
Q->base=(int*)malloc(MAX_QUEUE_SIZE*sizeof(int));
if(!Q->base){
printf("循环队列创建失败!\n");
}else{
printf("循环队列创建成功!\n");
/*初始化队头、队尾指针*/
Q->front=Q->rear=0;
printf("队头队尾指针初始化完毕!\n");
}
/*创建队列失败返回-1*/
//if(!Q->base) return -1;
/*初始化队头、队尾指针*/
//Q->front=Q->rear=0;
/*创建成功返回0*/
//return 0;
}
/*打印队列中所有元素*/
void PrintQueue(Queue *Q){
/*如果队列为空*/
if(Q->rear==Q->front){
printf("The Queue is empty!\n");
}else{
printf("The Queue is : ");
for(int i=Q->front;i<Q->rear;i++){
if(i==Q->rear-1){
printf("%d\n",Q->base[i]);
}else{
printf("%d ",Q->base[i]);
}
}
}
}
/*元素出循环队列*/
/*若队列不为空,则删除队头元素,由参数a带回其值并返回0,否则返回-1 */
void DelQueue(Queue *Q,int *a){
if(Q->rear==Q->front){
printf("队列中没有任何元素!!!\n");
}else{
*a=Q->base[Q->front];
Q->front=(Q->front+1)%MAX_QUEUE_SIZE;
printf("元素%d出队列完成!!!\n",*a);
}
/*
if(Q->rear==Q->front) return -1;
*a =Q->base[Q->front];
Q->front=(Q->front+1)%MAX_QUEUE_SIZE;
return 0;
*/
}
/*元素入循环队列*/
/*元素a入循环队列,成功返回0,否则返回-1*/
void EnQueue(Queue *Q,int a){
/*(5+1)%6==0*/
if((Q->rear+1)%MAX_QUEUE_SIZE==Q->front){
printf("循环队列已满!请等待其它元素出队后在进行入队列!!!\n");
/***
/*调用元素出队列方法*/
/*将队列中第一个元素拿出队列*/
//删除队首元素报错....
//DelQueue(Q,Q->base[Q->front]);
//printf("队列出现空位,即将进行入队操作......");
/*元素a排到队尾*/
//Q->base[Q->rear]=a;
/*移动队尾指针指向下一位*/
//Q->rear=(Q->rear+1)%MAX_QUEUE_SIZE;
//printf("元素%d入队列完成!!!\n",a);
/*打印此时的队列中所有元素*/
//PrintQueue(Q);
}else{
/*队列未满,进行入队列操作*/
printf("当前循环队列未满!正在进行入队列操作......\n");
/*元素a排到队尾*/
Q->base[Q->rear]=a;
/*移动队尾指针指向下一位*/
Q->rear=(Q->rear+1)%MAX_QUEUE_SIZE;
printf("元素%d入队列完成!!!\n",a);
/*打印此时的队列中所有元素*/
PrintQueue(Q);
}
/*(0+1)%6=1,此时队列空;(5+1)%6=0,此时队列满*/
//if((Q->rear+1)%MAX_QUEUE_SIZE==Q->front) return -1;
/*元素a进入队列,在队尾位置排队*/
//Q->base[Q->rear]=a;
//Q->rear=(Q->rear+1)%MAX_QUEUE_SIZE;
//return 0;
}
/*测试方法1*/
void test1(){
printf("测试方法一:\n");
/*声明队列*/
Queue queue;
/*初始化队列*/
InitQueue(&queue);
/*打印初始队列*/
PrintQueue(&queue);
printf("元素入循环队列开始......\n");
/*元素 10 入循环队列*/
EnQueue(&queue,10);
/*元素 32 入循环队列*/
EnQueue(&queue,32);
/*元素 52 入循环队列*/
EnQueue(&queue,52);
/*打印此时的循环队列*/
//PrintQueue(&queue);
for(int i=queue.front;i<queue.rear;i++){
DelQueue(&queue,&queue.base[i]);
}
printf("循环队列测试一完成!!!\n");
}
/*测试方法2*/
void test2(){
printf("测试方法二:\n");
/*声明队列*/
Queue queue;
/*初始化队列*/
InitQueue(&queue);
/*打印初始队列*/
PrintQueue(&queue);
printf("元素入循环队列开始......\n");
/*元素 10 入循环队列*/
EnQueue(&queue,10);
/*元素 32 入循环队列*/
EnQueue(&queue,32);
/*元素 52 入循环队列*/
EnQueue(&queue,52);
/*元素 64 入循环队列*/
EnQueue(&queue,64);
/*元素 21 入循环队列*/
EnQueue(&queue,21);
/*元素 11 入循环队列*/
EnQueue(&queue,11);
/*元素 33 入循环队列*/
EnQueue(&queue,33);
/*所有元素出队列*/
/*
for(int i=queue.front;i<queue.rear;i++){
DelQueue(&queue,&queue.base[i]);
}
*/
printf("循环队列测试二完成!!!\n");
}
/*测试*/
int main(){
//test1();
test2();
return 0;
}
运行结果如下:
部分代码参考了《软件设计师教程》第5版
请各位大佬多多指教!!!