`
xglla_1129
  • 浏览: 10180 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

(转)循环队列的队空与队满的条件

阅读更多

 转
http://blog.csdn.net/kangquan2008/article/details/5719529

为了方便起见,约定:初始化建空队时,令
      front=rear=0,
  当队空时:front=rear
  当队满时:front=rear 亦成立
  因此只凭等式front=rear无法判断队空还是队满。  有两种方法处理上述问题:
    (1)另设一个标志位以区别队列是空还是满。
    (2)少用一个元素空间,约定以“队列头指针front在队尾指针rear的下一个位置上”作为队列“满”状态的标志。即:
  队空时: front=rear
  队满时: (rear+1)%maxsize=front 

  front指向队首元素,rear指向队尾元素的下一个元素。 

 

/////////////////////////////////////////
// 
// author: kangquan2008@csdn
//
/////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define QUEUE_SIZE 10
#define EN_QUEUE 1
#define DE_QUEUE 2
#define EXIT     3

typedef int    Item;
typedef struct QUEUE{

	Item * item;
	int front;
	int tear;

}Queue;

int init_queue(Queue * queue)
{
	queue->item = malloc(QUEUE_SIZE * sizeof(Item));
	if(!queue->item)
	{
		printf("%s\n","Alloc failed,not memory enough");
		exit(EXIT_FAILURE);
	}

	queue->front = queue->tear = 0;

	return 1;
}

int en_queue(Queue * queue, Item item)
{
	if((queue->tear+1) % QUEUE_SIZE == queue->front)
	{
		printf("%s\n","The queue is full");
		return -1;
	}

	queue->item[queue->tear] = item;
	queue->tear = (queue->tear + 1) % QUEUE_SIZE;

	return 1;
}

int de_queue(Queue * queue, Item * item)
{
	if(queue->front == queue->tear)
	{
		printf("%s\n","The queue is empty");
		return -1;
	}

	(*item) = queue->item[queue->front];
	queue->front = (queue->front + 1) % QUEUE_SIZE;

	return 1;
}

int destroy_queue(Queue * queue)
{
	free(queue->item);
}

int main()
{
	Queue que;
	init_queue(&que);
	int elem;
	bool flag = true;
	while(flag)
	{
		int choice;
		printf("1 for en_queue,2 for de_queue,3 for exit\r\nplease input:");
		scanf("%d",&choice);

		switch((choice))
		{
			case EN_QUEUE:
				printf("input a num:");
				scanf("%d",&elem);
				en_queue(&que,elem);
				break;
			case DE_QUEUE:
				if(de_queue(&que,&elem) == 1)
					printf("front item is:%d\n",elem);
				break;
			case EXIT:
				flag = false;
				break;
			default:
				printf("error input\n");
				break;
		}
	}

	destroy_queue(&que);
	return 0;
}

 

 

  • 大小: 29.1 KB
  • 大小: 68.2 KB
分享到:
评论

相关推荐

    设计一个环形队列,用front和rear分别作为队头和队尾指针

    设计一个环形队列,用front和rear分别作为队头和队尾指针,另外用一个tag表示队列是空(0)还是不空(1),这样就可以用front==rear作为队满的条件。要求设计队列的相关基本运算算法。

    PTA 数据结构部分选择题

    数据结构复习题目,必须要填资源描述,我也没办法,我也不知道要填写什么,就随便填了一些

    数据结构队列习题.doc

    ()(10)顺序队和循环队关于队满和队空的判断条件是一样的。 二.填空题 1. 在队列中存取数据应遵循的原则是 。 2. 是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。 3. 在队列中,...

    数据结构题库答案

    数据结构的习题 习题复习指导 难以结合 成都适中 适合大部分学生下载参考

    C++数据结构之实现循环顺序队列

    数据结构–用C++实现循环顺序队列 ...那么问题就来了,队空和队满的判断条件相同,为了避免队满时产生队空的判断或者相反,我们需要修改队满条件使得队空和堆满的判定条件分开。 方法:浪费一个元素空间

    C语言数据结构之判断循环链表空与满

    主要介绍了C语言数据结构之判断循环链表空与满的相关资料,希望通过本文能帮助到大家,让大家掌握这部分内容,需要的朋友可以参考下

    利用tag定义一个环形队列

    设计一个环形队列,用front和rear分别作为对头和队尾指针,另外用一个tag表示队列是空(0)还是不空(1),这样就可以用front==rear作为队满的条件。要求设计队列的相关基本运算算法

    【数据结构】实验一:栈和队列(Python版)| 数制转换问题 + 求后缀表达式 + 舞会 + 连通块

    (特别是循环队列中 队头与队尾指针的变化情况); 4.灵活运用栈和队列这两种数据结构解决一些综合应用问题。理解栈和队列的特征以及它们之间的差异,知道在何时使用那种数据结构。 5.活运用栈和队列这两种数据结构...

    数据结构-队列队列是只能在表的一端进行插入,而在另一端进行删除的线性表 队尾:能进行插入的一端,称为入队,新元素进队后成为新

    队空和队满的条件:front= =rear 【题目描述】 给你一个有n个数的有序集合,要求不断进行这种操作:删去集合中最小的数,并将是它两倍的数加入集合。要求求出k次操作后集合中有哪些数,按照从小到大的顺序输出。n^5,...

    数据结构栈和队列课件

    栈和队列课件PPT下载 掌握栈和队列的特点,并能在相应的应用问题中正确选用; 熟练掌握栈的两种存储结构的基本操作实现算法,特别应注意...熟练掌握循环队列和链队列的基本操作实现算法,特别注意队满和队空的条件;

    数据结构实验-链表及栈的应用-天津理工大学

    3、重点掌握在顺序队上和链队上实现队列的基本运算算法,注意循环队队 满和队空的条件; 4、按时按要求完成实验报告。要求报告包括:实验步骤、算法思路、分析、 源程序、运行结果截图、实验小结等内容。 实验题目:...

    数据结构java版第3章课后答案

    (1)循环队列的优点是什么?如何判别它的空和满? 【解答】循环队列的优点...设有循环队列 sq,队满的判别条件为: (sq-&gt;rear+1)%maxsize==sq-&gt;front;或sq-&gt;num==maxsize。 队空的判别条件为:sq-&gt;rear==sq-&gt;front。

    数据结构(严版)讲义

    循环队列:队列空、队列满的条件 二叉树:递归遍历及应用 有序表的二分法查找 快速排序 简单选择排序 2. 绪论 掌握几个重要概念 数据结构、抽象数据类型、算法 时间复杂度的简单计算(C ) 掌握几种说法 数据元素...

    数据结构讲义(严蔚敏版)

    循环队列:队列空、队列满的条件 二叉树:递归遍历及应用 有序表的二分法查找 快速排序 简单选择排序 2. 绪论 掌握几个重要概念 数据结构、抽象数据类型、算法 时间复杂度的简单计算(C ) 掌握几种说法 数据元素...

    数据结构课程设计报告(图的存储与遍历)

    2.1课程设计内容 该课题要求以邻接表的方式存储图,输出邻接表,并要求实现图的深度、广度两种遍历。 2.1.1图的邻接表的建立与...并以队列是否为空作为循环控制条件。对于深度优先遍历则采用递归或非递归算法来实现。

    利用栈和队列解决迷宫问题

    1.迷宫的表示:用二维数组来...此外,无论是栈还是队列,都需要注意以下几个问题:如何处理邻居节点、如何判断边界条件、如何防止重复访问和死循环等。同时,需注意程序效率和空间使用,可通过剪枝策略等方法来优化。

    数据结构练习12020.doc

    数据结构作业(二) 2010-10-15 班级 姓名 学号 一、填空题 1... 在具有SIZE个数据元素的顺序存储的循环队列中,假定front和rear分别指示队列 里第一个元素的前一位置和最后一个元素的位置,则判断队空的条件是________

    2018年845回忆题(隹聿)1

    (1)给出队满队空条件,说明对应队满条件对存储空间有什么影响 (2)给出队列的当前存储的数据个数 (3)实现循环队列的插入、删除算法 (1)画出对应 B 树,每

    数据结构讲义(严蔚敏版)(含算法源码)

    注意循环队列空和满的条件(A,P) 会运用栈和队列 5. 串 掌握相关概念 会运用串的基本操作(C),特别是Concat(),Substring(),Index()和Replace() 知道串的三种存储结构及其特点 6. 树和二叉树 树和二叉树的...

    数据结构第三章作业答案参考(C语言)

    2.循环队列存储在数组A[0..m]中,则入队时的操作为( )。 A.rear=rear+1 B. rear=(rear+1) mod(m-1) C. rear=(rear+1)mod m D. rear=(rear+1) mod(m+1) 3. 栈和队列的共同点是( )。 A.都是先进先出 B...

Global site tag (gtag.js) - Google Analytics