顺序结构的循环队列

//循环队列
#include <stdio.h>
#include<stdlib.h>
#define MAXSIZE 5
#define status int
struct  Queue
{
	int* base;
	int front;
	int real;
}Q;
status initQueue(Queue &Q)
{
	Q.base=(int *)malloc(MAXSIZE*sizeof(int));
	if(!Q.base)
	{
		printf(" 内存分配失败,程序终止!\n");
		exit(-1);
	}
	Q.front=Q.real=0;
	return 1;
}
bool emptyQueue(Queue Q)
{
	if(Q.front==Q.real)
	return true;
	return false;
}
bool full_Queue(Queue Q)  //队满
{
	if((Q.real+1)%MAXSIZE==Q.front)
	return true;
	return false;
}
status QueueLenngth(Queue Q)
{
	// 返回队列长度
	return (Q.real-Q.front+MAXSIZE)%MAXSIZE;
}
int pop (Queue &Q,int &e)  //出队
{
	if(!emptyQueue(Q))
	{
		e=Q.base[Q.front];
	    Q.front=(Q.front+1)%MAXSIZE;
	    return 1;
	}
	else

	{
		printf("队为空,出队失败!\n");
		return 0;
	}
}
int push(Queue &Q,int &e)  //入队
{
	if((Q.real+1)%MAXSIZE==Q.front ) // 队满
	{
	    printf("队已满,入队失败!\n");
	    return 0;
	}
	Q.base[Q.real]=e;
	Q.real=(Q.real+1)%MAXSIZE;
	return 1;
}
void QueueTraverse(Queue Q)
{
	int t=Q.front;
	while(t!=Q.real)
	{
		printf("%d ",Q.base[t]);
		t=(t+1)%MAXSIZE;
	}
	printf("\n");
	return;
}
int main()
{
	Queue Q;
	int i,e;
	initQueue(Q);
	for(i=1;i<=5;++i)
	{
		push(Q,i);
		QueueTraverse(Q);
	}
	pop(Q,e);QueueTraverse(Q);
	pop(Q,e);QueueTraverse(Q);
	push(Q,e);
	QueueTraverse(Q);
	return 0;
}

时间: 2024-10-28 21:16:38

顺序结构的循环队列的相关文章

顺序结构栈与队列之货物货架管理

#include <iostream>#include<string.h> using namespace std; static int n;       //货架(栈)的最大容量 //信息结构体typedef struct /*Inform*/      //可以去掉Inform,在需要在结构体中定义结构体对象(指针)时不能去掉{    string name;    int a;}Inform; //栈的*顺序*结构体typedef struct{    Inform *ba

队列的顺序存储结构(循环队列)(C语言实现)

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define OK 1 5 #define ERR 2 6 #define TRUE 1 7 #define FALSE 0 8 #define MAXSIZE 4 //定义队列的最大长度 9 10 typedef int status; //定义函数返回的状态,OK & ERR 11 typedef char datatype; //定义队列中每个元素的数据类型,这里暂定为字符

线性结构之循环队列实现

#include<stdio.h> #include<malloc.h> #include<stdlib.h> #define maxsize 6 /* 循环队列是采用数组实现,传统的数组解决造成浪费大量内存.改进版既是循环数组来解决. */ typedef struct queue { int *pBase; int front; int rear; }Queue; void DeQueue(Queue *,int *val); void EnQueue(Queue

数据结构Java实现07----队列:顺序队列&amp;顺序循环队列、链式队列、顺序优先队列

数据结构Java实现07----队列:顺序队列&顺序循环队列.链式队列.顺序优先队列 一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列. 下图是一个依次向队列中插入数据元素a0,a1,...,an-

数据结构--循环队列

一.顺序队列的改进 队列元素的出列是在队头,即下标为0的位置,那也就意味着,队列中的所有元素都得向前移动,以保证队列的队头(也就是下标为0的位置)不为空,此时的时间复杂度为0(n). 可有时想想,为什么出队列时一定要全部移动呢,如果不去限制队列的元素必须存储在数组的前n个单元这一条件,出队的性能就会大大增加.也就是说,队头不需要一定在下标为0的位置,比如也可以是a[1]等. 而为了避免当只有一个元素时,队头和队尾重合使处理变得麻烦,引入两个指针,front指针指向队头元素,rear指针指向队尾元

09.循环队列与链队列

一.队列与循环队列 1.队列 (1)队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表.队列是一种先进先出(Fiirst In First Out)的线性表,简称FIFO.允许插入的一端称为队尾,允许删除的一端称为队头. 从队列的定义可知,队列的入队操作,其实就是在队尾追加一个元素,不需要移动任何元素,因此时间复杂度为O(1).队列的删除操作,与栈不同的是,队列元素的出列是在队头,即小标为0的位置,若要删除一个元素的话,需要移动队列的所有元素,因此事件复杂度为O(n).

大话数据结构----循环队列和链式队列

队列(Queue) 是只允许在一端进行插入操作,而在另一端进行删除操作的线性表 队列的特点就是:先进先出,和生活中排队的例子是很先进的,排队的目的不就是先到先得吗. 生活中的队列相当于顺序存储的队列,在火车站排队买票,前面的人买完票走了,后面的人一个一个往前移一位,这是很正常的事情,而计算机中队列队列第一个元素出去了,后面的元素一个一个往前移,这是一件很降低效率的一件事.为了解决这种效率问题,计算机采用循环队列的方式操作队数据. 循环队列 队列的头尾相接的顺序存储结构称为循环队列. 1.首先循环

PHP实现循环队列(顺序结构)

队列:先进先出,是一个应用很广泛的数据结构,不管是存储还是消息,还是待执行任务等等,生活以及软件中使用的栗子比比皆是. 不多说直接上代码,参考多家,觉得这个是最符合中心思想的.为了区分是否满队列,我们还是j决定使用空一格是满的,示意图如下 直接上代码 //循环队列,顺序存储 class queue{ private $data; private $front; private $rear; //定义最大容量     const MAX=5;     //定义数量  //初始化队列,头指针和尾指针

基本数据结构,循环队列的顺序实现。

队列是一种先进先出的数据结构,这里用顺序结构将其实现. 1.首先用结构体定义一个队列,front指向队首元素的前面一位,real指向队尾元素. 1 //队列的结构定义 2 #define MAX 6 3 typedef struct { 4 int front,real; 5 int data[MAX]; 6 }queue; 2.创建一个循环队列,初始化令front=real=0,因为当队列满时也有front=real,此时无法判断队满:所以我们弃置一个元素位不用,其位置随机,所以队列的实际最大