概述
C语言循环队列实例
程序目标
创建一个7个数据的循环队列,创建完成后立即返回排头和队尾元素指针,并返回队中元素,然后将倒数三个元素退队,退队后返回退队元素是什么,然后再返回队中元素和现在的排头和队尾指针。
源码
main.h
#include <stdio.h>
#include <math.h>
#include "Queue.h"
//函数声明
void InitQueue(Queue *Q);
void EnQueue(Queue *Q, int key);
int DeQueue(Queue *Q);
int IsQueueEmpty(Queue *Q);
int IsQueueFull(Queue *Q);
Queue.h
#include <stdio.h>
#include <stdlib.h>
typedef struct queue
{
int queuesize; //数组的大小
int head, tail; //队列的头和尾下标
int *q; //数组头指针
}Queue;
main.c
#include "main.h"
void main()
{
Queue example1,example2,*Q,*X;
int i,key,size,*h,*t;
Q=&example1;
X=&example2;
InitQueue(Q);
InitQueue(X);
printf("请输入七个整数n");
for(i=0;i<7;i++)
{
scanf("%d",&key);
EnQueue(Q,key);
}
//遍历队列
h=&Q->q[Q->head];
t=&Q->q[Q->tail-1];
size=(int)(fabs((double)((Q->tail)-(Q->head)))); //队列中现有的元素个数
printf("输入完成n您创建的队列的排头指针为n%dn队尾指针为n%dn队中各元素分别为n",h,t);
if(size==0)
printf("队列为空n");
else
for(i=0;i<size;i++)
printf("%dt",Q->q[(Q->head+i)%(Q->queuesize)]);
//寄存其余元素
InitQueue(X);
for(i=0;i<size-3;i++)
EnQueue(X,DeQueue(Q));
for(i=3;i>0;i--)
printf("n退队的倒数第%d个元素为n%dn",i,DeQueue(Q));
//恢复原队列剩余元素
for(i=0;i<size-3;i++)
EnQueue(Q,DeQueue(X));
//遍历剩余元素并输出头尾指针
h=&Q->q[Q->head];
t=&Q->q[Q->tail-1];
size=(int)(fabs((double)((Q->tail)-(Q->head)))); //队列中现有的元素个数
printf("此时队列的排头指针为n%dn队尾指针为n%dn队中剩余各元素分别为n",h,t);
if(size==0)
printf("队列为空n");
else
for(i=0;i<size;i++)
printf("%dt",Q->q[(Q->head+i)%(Q->queuesize)]);
}
Queue.c
void InitQueue(Queue *Q)//初始化队列
{
Q->queuesize = 8;
Q->q = (int *)malloc(sizeof(int) * Q->queuesize); //分配内存
Q->tail = 0;
Q->head = 0;
}
void EnQueue(Queue *Q, int key)//入队
{
int tail = (Q->tail+1) % Q->queuesize; //取余保证,当quil=queuesize-1时,再转回0
if (tail == Q->head) //此时队列没有空间
{
printf("队列已满n");
}
else
{
Q->q[Q->tail] = key;
Q->tail = tail;
}
}
int DeQueue(Queue *Q)//退队
{
int tmp;
if(Q->tail == Q->head) //判断队列不为空
{
tmp=0;
printf("队列为空n");
}
else
{
tmp = Q->q[Q->head];
Q->head = (Q->head+1) % Q->queuesize;
}
return tmp;
}
int IsQueueEmpty(Queue *Q)//判断队列是否为空
{
if(Q->head == Q->tail)
{
printf("队列为空n");
return 0;
}
else
{
printf("队列不为空n");
return 0;
}
}
int IsQueueFull(Queue *Q)//判断队列是否为满
{
if((Q->tail+1)% Q->queuesize == Q->head)
{
printf("队列已满n");
return 0;
}
else
{
printf("队列未满n");
return 0;
}
}
最后
以上就是迷路斑马为你收集整理的C :循环队列实例的全部内容,希望文章能够帮你解决C :循环队列实例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复