队列——数组实现

引言:

队列的实现除了链表外,也可用数组实现。

分析描述:

队列的结构:

typedef int ElementType;
typedef struct QueueRecord{
	int Capacity;
	int Front;
	int Rear;
	int Size;
	ElementType *Array;
}QueueRecord, *Queue;

创建队列:

void MakeEmpty(Queue Q)
{
	Q->Size  = 0;
	Q->Front = 1;
	Q->Rear  = 0;
}

Queue CreateQueue(int MaxElements)
{
	Queue QueueHead  = (Queue)malloc(sizeof(struct QueueRecord));
	if(QueueHead == NULL){
		fprintf(stderr, "out of sapce .\n");
		exit(0);
	}
	QueueHead->Array = (ElementType *)malloc(sizeof(ElementType)*MaxElements);
	if(QueueHead->Array == NULL){
		fprintf(stderr, "Out of sapce .\n");
	}
	QueueHead->Capacity  = MaxElements;

	MakeEmpty(QueueHead);

	return QueueHead;
}

判断队列为空或队列已满:

int IsEmpty(Queue Q)
{
	return Q->Size == 0;
}

int IsFull(Queue Q)
{
	return Q->Size == Q->Capacity;
}

入队列:

static int
Succ(int Value, Queue Q)
{
	if(++Value == Q->Capacity)
			Value = 0;
	return Value;
}

void Enqueue(ElementType data, Queue Q)
{
	if(IsFull(Q))
		fprintf(stderr, "full queue.\n");
	else{
		Q->Size++;
		Q->Rear = Su(Q->Rear, Q);
		Q->Array[Q->Rear] = X;
	}

}

出队列:

void Dequeue(Queue Q)
{
	if(IsEmpty(Q))
		fprintf(stderr, "Empty queue.\n");
	else{
		Q->Size--;
		Q->Front = Succ(Q->Front, Q);
	}
}

队列——数组实现,布布扣,bubuko.com

时间: 2024-12-30 03:51:42

队列——数组实现的相关文章

数据结构实践——队列数组

本文是针对数据结构基础系列网络课程(3):栈和队列的实践项目. [项目 - 队列数组] 创建10个队列,分别编号为0-9(处理为队列数组,编号即下标).输入若干个正整数,以数字0作为结束.设输入的值为x,其个位数字的大小为i,则将x插入到编号为i的队列中.最后输出所有的非空队列. 要求将队列处理成链式队列,使用链式队列算法库中定义的数据类型及算法,程序中只包括一个函数(main函数),入队和出队等操作直接在main函数中调用即可. 设程序运行时输入:70 59 90 72 67 88 80 64

顺序队列(数组实现)

下面利用数组实现的循环队列,并考虑了上溢出和下溢出. public class Queue { private int[] queue; private static final int defaultSize = 100; private int size; private int tail, head; public Queue() { setUp(defaultSize); } public Queue(int sz) { setUp(sz); } public void setUp(in

队列--数组实现

可以仿照利用数组实现栈的过程,使用数组实现队列.以front指向队首元素,值始终为数组首元素a[0].出队时,front保持不变,删除队首元素,其余元素依次向前移动,时间复杂度是O(n).入队时,根据队列大小将元素存储到相应位置.上述实现因为不断移动元素,效率太低.因此以下使用环形数组的形式来构造队列.定义两个变量: front:指向队首元素. rear:指向队尾元素的下一个位置.另外设环形数组大小为len.初始状态下,front=rear=0.入队时,在rear指向的位置存储元素,然后令rea

【数据结构】队列-数组的实现

首先定义队列的基本结构,队列和栈不同之处在于队列需要两个指针,一个指向头,一个指向尾 String[] queue; int front = 0; int rear = 0; 构造方法 public QueueOfStrings(int capacity) { queue = new String[capacity]; } 进队列 public void enqueue(String str) { queue[rear++] = str; if (rear == queue.length) re

单调队列 数组写法qwq

1 #include<bits/stdc++.h> 2 #define ll unsigned long long 3 #define LL long long 4 const int MOD=1e9+7; 5 const int maxn=2e5+5; 6 using namespace std; 7 8 int que[maxn],a[maxn]; 9 void que_min(int n) 10 { 11 int l=0,r=0;//头尾相等 12 for(int i=1;i<=n

构建队列,数组版本

队列作为基本的数据结构,是每个coder所必须掌握的. 队列在逻辑上就像是一条打饭的长队,排在前面的先打到饭(先进先出). 这里用一个数组用以构造一个队列,并设置两个指向,head指向队首,tail指向队尾,初始状态是head与tail指向同一位置(队列为空) 队列有两个操作:入队与出队. 1.入队:对比打饭排队的场景,新来的人排在后面,这是队尾tail需向后移一位. 2.出队:已经打好饭的人就可以出去了,这时队头也需向后移一位,让后面的人成为队头. 注意: 当head与tail都移到数组末端,

基于数组实现Java 自定义Queue队列及应用

Java 自定义队列Queue: 队列的抽象数据类型就是一个容器,其中的对象排成一个序列,我们只能访问和取出排在最前端( Front)的对象,只能在队列的尾部( Rear)插入新对象.正是按照这一规则,才能保证最先被插入的对象首先被删除( FIFO).java本身是有自带Queue类包,为了达到学习目的已经更好深入了解Queue队列,自己动手自建java Queue类是个很好的学习开始: 基于数组的实现 ? 顺序数组 借助一个定长数组 Q 来存放对象,即可简单地实现队列.那么,为了符合 FIFO

JAVA实现数组队列,循环数组队列,链式队列

/** * 文件名:QueueText.java * 时间:2014年10月22日下午9:05:13 * 作者:修维康 */ package chapter3; /** * 类名:ArrayQueue * 说明:队列的数组实现 */ class ArrayQueue<AnyType>{ private static final int DEFAULT_CAPACITY = 10; private int front;//队头 private int rear;//队尾 private int

数组函数与数据结构《实现堆栈,实现队列》

在强类型的变成语言中,有专用的数据结构解决方案.通常都是创建一个容器,在这个容器中可以存储任意类型的数据,并且可以根据容器中存储的数据决定容器的容量,达到可以变长的容器结构,比如链表.堆栈及队列等都是数据结构中常用的形式.在PHP中,通常都是使用数组来完成其他语言使用数据结构才能完成的工作.它是弱类型语言,在同一个数组中就可以存储多种类型的数据,而且PHP中的数组没有长度限制,数组存储数据的容量还可以根据里面元素个数的增减自动调整. 一.使用数组实现堆栈 堆栈是数据结构的一种实现形式,是一种使用