我是靠谱客的博主 迷路斑马,最近开发中收集的这篇文章主要介绍C :循环队列实例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 :循环队列实例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部