`
jacobcookie
  • 浏览: 94846 次
社区版块
存档分类
最新评论

循环队列的实现

阅读更多
#include<stdio.h>
#define size 10  //最大队列长度,实际上只能存入(size-1)个数据
typedef char DataType;
//循环队列可以解决顺序队列的假满现象
//循环队列的类型定义
typedef struct 
{
	DataType data[size];//存储队列的数据空间
	int front,rear;//队头和队尾指针
}circleQueue;

//初始化队列
void init(circleQueue * q)
{
	q->front=q->rear=0;
}

//判断队列是否为空
int isEmpty(circleQueue *s)
{
	return s->front==s->rear;
}

//判断队列是否为满
int isFull(circleQueue *q)
{
	return (q->rear+1)%size==q->front;
}

//元素入队,rear所指的单元始终未空
void inQueue(circleQueue *q,DataType e)
{
	if(isFull(q))
	{
		printf("Over Flow !");
	}
	else
	{
		q->data[q->rear]=e;
		q->rear=(q->rear+1)%size;//队尾指针上移一位
	}
}

//元素出队
DataType outQueue(circleQueue *q)
{
	DataType x;
	if(isEmpty(q))
	{
		printf("Under Flow !");
		return NULL;
	}
	else
	{
		x=q->data[q->front];
	    q->front=(q->front+1)%size;//队头指针上移一位
		return x;
	}
}

//打印队列
void printQueue(circleQueue q)
{
	while(q.front!=q.rear)
	{
		printf("%c ",q.data[q.front]);
		q.front=(q.front+1)%size;
	}
	printf("\n");
}

//取得队头元素
DataType getFirst(circleQueue q)
{
	if(isEmpty(&q))
	{
		printf("Under Flow !");
		return NULL;
	}
	else
	{
		return q.data[q.front];
	}
}
void main()
{
	circleQueue q;
	DataType c;
	init(&q);
	while((c=getchar())!='\n')
	{
		inQueue(&q,c);
	}
	printf("出队顺序为:");
	printQueue(q);

	outQueue(&q);
	printf("出队顺序为:");
	printQueue(q);

	printf("队头元素为:%c",getFirst(q));
	printf("\n");
}
分享到:
评论

相关推荐

    循环队列实现杨辉三角

    该C程序使用循环队列实现了N行杨辉三角的输出,实现简单。 使用VC进行编译即可。

    51单片机的FIFO(先入先出)循环队列实现

    51单片机的FIFO(先入先出)循环队列实现 51单片机是基于Intel 8051微控制器架构的一类单片机,在嵌入式系统开发中应用广泛。FIFO是一种数据结构,全称为First In First Out,即先进先出,类似于现实生活中的排队...

    循环队列实现斐波那契数列

    用循环队列实现的n阶斐波那契数列的求解。输出最后n-1个不大于max的斐波那契数列。

    k阶斐波那契序列 循环队列实现C源码

    以下是一个简单的循环队列实现: ```cpp #include struct Queue { int* arr; int front, rear; int capacity; Queue(int size) : arr(new int[size]), front(0), rear(0), capacity(size) {} ~Queue() { ...

    利用循环队列实现AOV 网的拓扑排序

    在本文中,我们将讨论如何使用循环队列实现AOV网的拓扑排序。循环队列是一种特殊的队列结构,它具有高效的存储和检索能力,可以有效地解决拓扑排序问题。 首先,我们需要对AOV网进行初始化,包括顶点的输入和存储,...

    循环队列的C++实现

    循环队列是一种线性数据结构,它在物理结构上实现了一个闭合的循环,因此队首和队尾可以在数组的任意位置。这种设计使得在队列满或空时,仍能有效地进行入队和出队操作,避免了普通队列在达到边界条件时的特殊处理。...

    循环队列实现杨辉三角的输出

    用循环队列实现杨辉三角的输出。通过该程序可以让你对循环队列有一定的理解。

    数据结构课程设计说明书贪吃蛇的循环队列实现.pdf

    数据结构课程设计说明书中的主题是使用循环队列实现贪吃蛇游戏。循环队列是一种特殊类型的线性数据结构,它在物理存储上是线性的,但在逻辑上表现为一个环形结构,具有首尾相连的特点。在贪吃蛇游戏中,循环队列被...

    循环队列实现源码(C、C++、Java)

    本文将深入探讨循环队列的概念、工作原理,并提供C、C++和Java三种语言的实现源码。 **循环队列概念** 循环队列是队列的一种优化版本,它利用数组的循环特性来模拟队列的操作。在循环队列中,队头元素和队尾元素的...

    用循环队列实现斐波那契数列的输出

    为了实现斐波那契数列,我们可以利用循环队列的特性,将最近的两个斐波那契数作为队列中的元素,并通过出队和入队操作计算新的斐波那契数。 首先,我们需要创建一个循环队列的结构体,包括存储斐波那契数的数组、队...

    Android之循环队列操作

    以下是一个简单的循环队列实现: ```java public class CircularQueue&lt;T&gt; { private T[] elements; private int front; // 队头位置 private int rear; // 队尾位置 private int size; public CircularQueue...

    用循环队列实现银行排队系统(VIP客户优先出队)

    利用循环队列来实现银行排队系统,对进入队列的客户分为VIP和普通客户,其中VIP优先出队。能实现的功能如下1.新客户排队等待服务 2.客户离开排队服务 3.查询当前客户前面还有几人 4.查询截止目前总共办理多少客户 注...

    循环队列的基本操作及应用----数据结构试验

    * 任务队列:在操作系统中,任务队列可以用循环队列实现,以便管理和调度系统中的任务。 * 网络缓冲区:在网络通信中,循环队列可以用来实现网络缓冲区,以便缓存和处理网络数据。 * 打印队列:在打印系统中,循环...

    循环队列实现求k阶斐波那契数列

    用循环队列编写求k阶斐波那契序列中前n+1项(f0,,f1,f2,…,fn)的算法,满足fn,而fn +1&gt;max,max为某个约定的常数,所用循环队列的容量为k,且算法结束时,留在队列中的元素为所求k阶斐波那契序列中的最后k项

    CircularQueue循环队列实现

    在这个实现中,我们主要探讨如何通过C++或者类似的编程语言来构建一个高效的循环队列,并将其封装成一个易于使用的库。 首先,我们需要理解循环队列的基本概念。在传统的线性队列中,如果队列的尾部达到了数组的...

    循环队列

    循环队列

    java队列实现(顺序队列、链式队列、循环队列)

    在Java中,队列的实现主要有三种:顺序队列、链式队列和循环队列。下面我们将详细探讨这三种队列的实现方式。 1. **顺序队列**: 顺序队列通常是基于数组实现的。在Java中,我们可以使用ArrayList或LinkedList来...

    java循环队列的分析和实例介绍.pdf

    以下是一个基于上述原理的循环队列实现的伪代码示例: ```pseudocode type QueueType = record Elements: array[1..MaxLength] of ElementType; front, rear: TPosition; end; function Front(Q: QueueType): ...

    简单的C语言循环队列

    C语言中的循环队列实现** 在C语言中,我们可以定义一个结构体来表示循环队列,包含数组、队头指针、队尾指针等成员。初始化时,队头和队尾指针均设为0,数组为空。入队操作时,将新元素添加到队尾指针指向的位置,...

Global site tag (gtag.js) - Google Analytics