实验1.2 顺序循环队列的实现

合集下载

循环队列操作实验报告

循环队列操作实验报告

实验目的:通过本次实验,掌握循环队列的基本概念和操作方法,了解其在实际应用中的优势,并能够熟练运用循环队列解决实际问题。

实验环境:操作系统:Windows 10编程语言:C语言开发环境:Visual Studio实验内容:1. 循环队列的定义及初始化2. 循环队列的入队操作3. 循环队列的出队操作4. 循环队列的判空操作5. 循环队列的判满操作6. 循环队列的遍历操作7. 循环队列的应用实例实验步骤:一、循环队列的定义及初始化1. 定义循环队列的数据结构:```c#define MAX_SIZE 100 // 定义队列的最大容量typedef struct {int data[MAX_SIZE]; // 存储队列元素的数组int front; // 队头指针int rear; // 队尾指针} CircleQueue;```2. 初始化循环队列:```cvoid InitQueue(CircleQueue q) {q->front = q->rear = 0; // 初始化队头和队尾指针}```二、循环队列的入队操作1. 判断队列是否已满:```cint IsFull(CircleQueue q) {return (q->rear + 1) % MAX_SIZE == q->front;}```2. 入队操作:```cint EnQueue(CircleQueue q, int e) {if (IsFull(q)) {return 0; // 队列已满,无法入队}q->data[q->rear] = e; // 将元素e入队q->rear = (q->rear + 1) % MAX_SIZE; // 更新队尾指针return 1; // 入队成功}```三、循环队列的出队操作1. 判断队列是否为空:```cint IsEmpty(CircleQueue q) {return q->front == q->rear;}```2. 出队操作:```cint DeQueue(CircleQueue q, int e) {if (IsEmpty(q)) {return 0; // 队列为空,无法出队}e = q->data[q->front]; // 将队头元素出队q->front = (q->front + 1) % MAX_SIZE; // 更新队头指针 return 1; // 出队成功}```四、循环队列的判空操作1. 判断队列是否为空:```cint IsEmpty(CircleQueue q) {return q->front == q->rear;}```五、循环队列的判满操作1. 判断队列是否已满:```cint IsFull(CircleQueue q) {return (q->rear + 1) % MAX_SIZE == q->front; }```六、循环队列的遍历操作1. 遍历循环队列:```cvoid TraverseQueue(CircleQueue q) {if (IsEmpty(q)) {printf("队列为空,无法遍历。

顺序循环队列表实现

顺序循环队列表实现

顺序循环队列表实现————————————————————————————————作者:————————————————————————————————日期:队列的基本概念队列也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系与线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作,在其另一端进行删除操作。

队列中允许进行插入操作的一端称为队尾。

允许进行删除操作的一端称为队头。

队头和队尾分别由队头指针和队尾指针指示。

队列的插入操作称为入队列,队列的删除操作称为出队列。

最先入队列的元素总是最先出队列,所以队列也称为先进先出表。

下图是一个一次向队列中插入数据元素a0,a1,a2,….an-1后的示意图,其中,a0是当前队头数据元素,an-1是当前队尾的数据元素。

队头队尾a0 a1 a2 ……an-1<-出<-入队列抽象数据类型数据集合:队列的数据集合可以表示为a0,a1,a2,a3….an-1,每个数据元素的数据类型为DataType。

操作集合:(1)初始化QueueInitiate(Q):初始化队列Q(2)非空否QueueNotEmpty(Q):队列Q非空否,若队列非空,函数返回值为1。

否则,函数返回0。

(3)入队列QueueAppend(Q,x):在队列Q的队尾插入数据元素x。

入队列成功返回1;失败则返回0。

(4)出队列QueueDelete(Q,d):把队列Q的队头数据元素删除并由参数d带回。

如出队列成功,返回1;失败则返回0。

(5)取队头数据元素QueueGet(Q,d):取队头数据元素并由参数d带回。

如取到数据元素返回1,否则,返回0。

顺序队列顺序存储结构的队列称作顺序队列假设为队列开辟的数组单元数目为MAX_QUEUE,在C语言中,它的下标在0~MAX_QUEUE-1之间,若增加队头或队尾指针,可以利用取模运算(一个整数数值整除以另一个整数数值的余数)实现。

顺序循环队列实验报告

顺序循环队列实验报告

一、实验目的1. 理解顺序循环队列的概念和原理。

2. 掌握顺序循环队列的初始化、入队、出队等基本操作。

3. 通过编程实现顺序循环队列,并验证其功能。

二、实验原理顺序循环队列是一种利用一维数组实现队列的存储结构。

它将一维数组看作是首尾相连的循环结构,队列的头部和尾部在数组的两端。

顺序循环队列的特点是:队列满时,头指针和尾指针相差一个数组的长度;队列空时,头指针和尾指针相等。

顺序循环队列的基本操作如下:1. 初始化:创建一个顺序循环队列,并设置头指针和尾指针。

2. 入队:将元素插入队列尾部。

3. 出队:从队列头部删除元素。

4. 判断队列是否为空或满。

三、实验内容1. 创建顺序循环队列类。

2. 实现顺序循环队列的初始化、入队、出队等基本操作。

3. 编写测试代码,验证顺序循环队列的功能。

四、实验步骤1. 创建顺序循环队列类,定义队列长度、头指针、尾指针等属性。

2. 实现顺序循环队列的初始化方法,初始化头指针和尾指针。

3. 实现顺序循环队列的入队方法,判断队列是否已满,如果未满,将元素插入队列尾部,并更新尾指针;如果已满,则提示队列已满。

4. 实现顺序循环队列的出队方法,判断队列是否为空,如果为空,则提示队列已空;如果未空,则从队列头部删除元素,并更新头指针。

5. 编写测试代码,创建顺序循环队列实例,执行入队和出队操作,验证顺序循环队列的功能。

五、实验结果与分析1. 初始化顺序循环队列```pythonclass CircularQueue:def __init__(self, size):self.queue = [None] sizeself.head = 0self.tail = 0self.count = 0self.maxsize = size```2. 入队操作```pythondef enqueue(self, item):if self.count == self.maxsize:print("Queue is full")else:self.queue[self.tail] = itemself.tail = (self.tail + 1) % self.maxsizeself.count += 1```3. 出队操作```pythondef dequeue(self):if self.count == 0:print("Queue is empty")else:item = self.queue[self.head]self.queue[self.head] = Noneself.head = (self.head + 1) % self.maxsize self.count -= 1return item```4. 测试代码```pythondef test_circular_queue():queue = CircularQueue(5)print("Enqueue 1 to 5:")for i in range(1, 6):queue.enqueue(i)print(queue.queue)print("Dequeue 1 to 5:")for _ in range(5):print(queue.dequeue())print(queue.queue)test_circular_queue()```实验结果分析:通过测试代码,我们可以看到顺序循环队列在初始化、入队和出队操作时都能正确执行。

c语言数组实现的循环队列

c语言数组实现的循环队列

c语言数组实现的循环队列
C语言中可以通过数组来实现循环队列。

循环队列是一种环形的数据结构,它允许在队列的两端都可以进行插入和删除操作,而且队列的长度是固定的。

下面我将从定义、实现、操作等多个角度来详细介绍C语言数组实现的循环队列。

1. 定义:
循环队列是一种环形队列,它由一个固定大小的数组和两个指针(front和rear)组成。

front指向队列的第一个元素,rear指向队列最后一个元素的下一个位置。

当front和rear相等时,队列为空;当rear在front的前面一个位置时,队列为满。

2. 实现:
在C语言中,可以通过数组和指针来实现循环队列。

首先需要定义一个固定大小的数组来存储队列元素,然后使用front和rear 指针来标记队列的头部和尾部。

在进行插入和删除操作时,需要更新front和rear指针的位置,并且要考虑数组下标越界的情况。

3. 操作:
循环队列的操作包括初始化、插入、删除、判空、判满等。

在C语言中,可以通过编写相应的函数来实现这些操作。

初始化函数用于初始化队列和指针;插入函数用于向队列尾部插入元素;删除函数用于从队列头部删除元素;判空函数用于判断队列是否为空;判满函数用于判断队列是否已满。

总结:
C语言中数组实现的循环队列是一种高效的数据结构,它能够充分利用数组的空间,并且可以在固定大小的数组上实现队列的循环操作。

通过合理设计插入、删除等操作,可以实现一个功能完善的循环队列,满足各种实际应用的需求。

希望以上介绍能够帮助你更好地理解C语言数组实现的循环队列。

队列:顺序队列和循环队列

队列:顺序队列和循环队列

队列:顺序队列和循环队列和栈的先进后出不同,队列的形式是先进先出,队列的想法来⾃于⽣活中排队的策略,顾客在付款结账的时候,按照到来的先后顺序排队结账。

先来的顾客先结账,后来的顾客后结账。

队列有两种实现形式:1 顺序表实现 2 循环顺序表 ⾸先来看下顺序表的实现,在python中,队列的实现⽤list来写⼗分的⽅便。

实现⽅式如下:class line_queue():def __init__(self):self._elem=[]def push(self,elem):self._elem.append(elem)def pop(self):elem=self._elem.pop(0)return elemdef queue_length(self):return len(self._elem)和栈唯⼀的区别是,这⾥pop是pop(0),也就是⾸先进队列的数据出列。

这个实现很简单,但是有⼀个问题,每次有元素出队列的时候,元素都必须要进⾏前移。

这就带来了⼀个问题,它的操作复杂度为O(n),⽽不是O(1)。

只有从尾部弹出元素也就是先进后出的时候复杂度为O(1).那么如何才能满⾜O(1)的出列复杂度呢。

我们可以考虑记住队头和队尾的位置。

每次出队的时候直接将队头位置的元素弹出就可以了。

具体的实现可以参考下图下⾯来看下代码的实现:class line_queue_update():def __init__(self):self._elem=[]self.head=self.rear=0def push(self,elem):self._elem.append(elem)self.rear+=1def pop(self):elem=self._elem[self.head]self.head+=1return elemdef queue_length(self):return len(self._elem)def get_elem(self):print self._elemif __name__=="__main__":q=line_queue_update()for i in range(10):q.push(i)print 'The length is %d' % q.queue_length()q.pop()q.pop()q.push(90)q.push(100)q.push(200)print 'The length is %d' % q.queue_length()运⾏结果如下:/usr/bin/python2.7 /home/zhf/py_prj/data_struct/chapter5.pyThe length is 10The length is 13这个⽅法的实现出队列的复杂度就是O(1)。

队列(循环队列的顺序实现)

队列(循环队列的顺序实现)

队列(循环队列的顺序实现)⼀、概述与栈相反,队列是先进先出(FIFO),后进后出的数据结构。

插⼊的⼀端叫做队尾,⽽出去的⼀端则称为队头或队⾸。

但是队列(Queue)有⼀种扩展形式,称为双端队列(Deque),即可以在两端都进⾏插⼊和删除的操作,看起来双端队列似乎更加使⽤,但在实际应⽤中却并不常见。

同样的,队列也有两种实现形式,即顺序队列和链队列。

链队列可以参考链栈,直接将出栈操作改成删除头节点即可,插⼊删除⽅便,适合栈和队列。

顺序队列当然是数组实现,顺序队列的问题在于出队时前⾯空出的位置是否由后⾯的元素补充,如果不补充,那么会造成空间极度的浪费,如果补充,那么需要将每个元素都向前移,时间复杂度此时来到O(N),为了解决这个问题,循环队列应运⽽⽣,即将补充的元素放到前⾯由于出队⽽造成的空缺位置。

这样就可以最⼤限度的利⽤已申请的空间。

⼆、顺序实现循环队列数据域:private int Capacity;private int front;private int rear;private int [] data;static int DEFAULT_SIZE = 6;public Queue(){front = rear = 0;Capacity = DEFAULT_SIZE;data = new int [Capacity];}由于JAVA并不⽀持泛型数组,因此我们以int型的队列作为⽰例。

这⾥简单描述⼀下循环队列的结构,⼀个空的循环队列如下图:当⼊队3个元素时变为:再出队1个元素接下来是求长度和判满空public int getSize(){return (rear - front + Capacity) % Capacity;}public boolean isEmpty(){return (rear == front);}public boolean isFull(){return ((rear + 1) % Capacity == front);}先说求元素个数(长度),从图中看起来好像直接返回rear-front即可,但是因为是循环队列,考虑下列情况:显然不能⽤简单的减法,必须将两种算法统⼀起来,因此(rear - front + Capacity) % Capacity正是起到这样的作⽤。

数据结构实验4循环队列的实现和运算

数据结构实验4循环队列的实现和运算

数据结构实验4循环队列的实现和运算循环队列是一种特殊的队列,它的特点是可以循环利用已经出队的元
素所占用的空间。

循环队列采用一维数组来实现,通常需要两个指针(称
为队头指针front和队尾指针rear)。

循环队列的基本操作包括初始化、判空、判满、入队、出队、获取队
头元素等。

1. 初始化:循环队列的初始化很简单,只需将队头指针front和队
尾指针rear都置为0即可。

2. 判空:当队头指针front和队尾指针rear相等时,队列为空。

3. 判满:当队尾指针rear加1后等于队头指针front时,队列为满。

4. 入队操作:在插入元素之前,需要判断队列是否已满。

如果队列
为满,则无法插入新的元素;否则,在rear指针的位置插入新的元素,
并将rear指针往后移动一位。

5. 出队操作:在删除元素之前,需要判断队列是否为空。

如果队列
为空,则无法删除元素;否则,在front指针的位置删除元素,并将
front指针往后移动一位。

6. 获取队头元素:获取队列的队头元素很简单,只需返回front指
针位置的元素即可。

循环队列的实现比较简洁高效,主要是通过取模运算来实现队列指针
的循环移动。

当rear指针到达数组的最后一个位置时,再插入新的元素时,需要将rear指针指向数组的第一个位置;当front指针在数组的最
后一个位置上时,再删除元素时,需要将front指针指向数组的第一个位置。

通过循环队列的实现和运算,可以高效地进行队列的操作,从而提高算法的执行效率。

在实际应用中,循环队列常被用于实现缓冲区、进程调度等场景。

循环队列基本操作的实现

循环队列基本操作的实现
PrintQueue(Q); //输出循环队列Q中的元素
break;
case 4: //输出队头元素
if(GetHead(Q,e))
cout<<"队头元素为:"<<e<<endl;
else
cout<<"当前队列为空队列,没有队头元素"<<endl;
break;
case 5: //输出队尾元素
if(GetTail(Q,e))
}
int main()
{
SqQueue Q; //定义循环队列Q
int k;
char e;
bool flag;
InitQueue(Q); //初始化循环队列Q
cout<<"循环队列Q初始化成功"<<endl;
//循环显示菜单,完成循环队列的一系列操作
do{
showmenu();
cout<<"请选择要执行的操作序号"<<endl;
bool DeQueue(SqQueue &Q,char &e)
{
if(Q.front==Q.rear)
return false;
e = Q.base[Q.front];
Q.front = (Q.front+1)%MAXSIZE;
return true;
}
//取循环队列Q的队头元素,用参数e返回取得的队头元素
bool GetHead(SqQueue Q,char &e)
{
if(Q.front!=Q.rear)
{
e=Q.base[Q.front];

实验八-队列(循环队列)的表示和实现-舞伴问题

实验八-队列(循环队列)的表示和实现-舞伴问题

浙江大学城市学院实验报告课程名称数据结构基础实验项目名称实验八队列(循环队列)的表示和实现学生姓名*** 专业班级信管1104 学号3110****实验成绩指导老师(签名)日期一.实验目的和要求1、掌握队列的存储结构及基本操作。

2、掌握循环队列的设置及循环队列的各种基本操作的实现。

3、通过具体的应用实例,进一步熟悉和掌握队列的实际应用。

二.实验内容1、建立头文件SeqQueue.h,定义顺序存储的循环队列存储结构,并编写循环队列的各种基本操作实现函数。

同时建立一个验证操作实现的主函数文件test3_2.cpp,编译并调试程序,直到正确运行。

2、选做:编写程序,实现舞伴问题。

假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队,跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴,若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。

要求设计一个函数void partner(),模拟上述舞伴配对问题。

基本要求:1) 由键盘输入数据,每对数据包括姓名和性别;2) 输出结果包括配成舞伴的女士和男士的姓名,以及未配对者的队伍名称和队头者的姓名;3) 要求利用SeqQueue.h中已实现的顺序循环队列的基本操作函数来实现。

函数void partner() 添加到文件test3_2.cpp中,在主函数中进行调用测试。

3、填写实验报告,实验报告文件取名为report8.doc。

4、上传实验报告文件report8.doc、源程序文件test3_2.cpp及SeqQueue.h 到Ftp服务器上自己的文件夹下。

三. 函数的功能说明及算法思路(包括每个函数的功能说明,及一些重要函数的算法实现思路)1)InitQueue(Queue &q)实现初始化队列的功能2)EnQueue(Queue &q,ElemType item)向队列插入元素item3)OutQueue(Queue &q)队列头位元素出列,并返回该值4)PeekQueue(Queue &q)返回队头元素值5)EmptyQueue(Queue &q)判断队列Q是否为空,若空返回1,否则返回06)ClearQueue(Queue &q)清空队列7)partner()实现舞伴的配对操作。

循环队列详解及队列的顺序表示和实现

循环队列详解及队列的顺序表示和实现

循环队列详解及队列的顺序表⽰和实现循环队列——队列的顺序表⽰和实现前⾯分析顺序队的时候,我们知道,顺序队存在”假溢出”的问题,这个问题有时会造成很⼤的内存浪费,循环队列就是为了解决这个问题⽽提出地⼀个很巧妙的办法.循环队列和顺序队列的主要区别在于:循环队列将顺序队列臆造成⼀个环状空间.在操作上这种异同体现在:相同点:在顺序队列和循环队列中,进⾏出队、⼊队操作时,队⾸、队尾指针都要加 1 ,朝前移动。

不同点:1. 在循环队列中当队⾸、队尾指针指向向量上界(MAX_QUEUE_SIZE-1) 时,其加1 操作的结果是指向向量的下界 0 。

⽽在顺序队列中,说明队已满,若此时采⽤的是动态顺序链,可以增加申请内存.若是采⽤静态顺序链,只能退出程序.2. 顺序队列中q.front = q.rear 表⽰队空,q.rear = MAX_QUEUE_SIZE表⽰队满.⽽在循环队列中.front=q.rear表⽰队空,⽽⽆法⽤.rear=MAX_QUEUE_SIZE表⽰队满.判断循环队列队满的两种⽅法(本⽂采⽤第⼆种⽅法):1.另设⼀个标志位以区分队列是空还是满2.少⽤⼀个元素空间,约定以”队列头指针在队列尾指针的下⼀位置上”,作为队列呈满状态的标志.第⼆种⽅法的实现:◆ rear 所指的单元始终为空。

◆循环队列为空: front=rear 。

◆循环队列满: (rear+1)%MAX_QUEUE_SIZE=front 。

循环队列操作及指针变化情况如下图所⽰:循环队列虽然可以解决”假溢出”问题,但是它不能通过动态分配的⼀维数组来实现,所以在实现循环队列之前,⼀定要为它设定⼀个最⼤队列长度.如果⽆法预估所需的最⼤队列长度,只能采⽤来链表实现.代码实现:循环队列和顺序队列的头⽂件是⼀样的/* 循环队列的接⼝定义头⽂件 */#define true 1#define false 0/* 队的最⼤长度 */#define MAX_QUEUE_SIZE 6/* 队列的数据类型 */typedef int datatype;/* 静态链的数据结构 */typedef struct queue{datatype sp_queue_array[MAX_QUEUE_SIZE];/* 队头 */int front;/* 队尾 */int rear;}cir_queue;/* 静态顺序链的接⼝定义 *//* 静态链的初始化 */cir_queue queue_init();/* 判断队列是否为空,若为空* 返回true* 否则返回false*/int queue_empty(cir_queue q);/* 插⼊元素e为队q的队尾新元素* 插⼊成功返回true* 队满返回false*/int queue_en(cir_queue *q, datatype e);/* 队头元素出队* ⽤e返回出队元素,并返回true* 若队空返回false*/int queue_de(cir_queue *q, datatype *e);/* 清空队 */void queue_clear(cir_queue *q);/* 获得队头元素* 队列⾮空,⽤e返回队头元素,并返回true* 否则返回false*/int get_front(cir_queue, datatype *e );/* 获得队长 */int queue_len(cir_queue q);/* 遍历队 */void queue_traverse(cir_queue q, void(*visit)(cir_queue q)); void visit(cir_queue s);/* 循环队列的接⼝实现⽂件 */#include<stdio.h>#include<stdlib.h>#include"cir_queue.h"cir_queue queue_init(){cir_queue q;q.front = q. rear = 0;return q;}int queue_empty(cir_queue q){return q.front == q.rear;}int queue_en(cir_queue *q, datatype e){/* 判断队是否已满 */if (q -> front == (q -> rear + 1) % MAX_QUEUE_SIZE) return false;/* ⼊队 */q -> sp_queue_array[q -> rear] = e;q -> rear = (q -> rear + 1) % MAX_QUEUE_SIZE;return true;}int queue_de(cir_queue *q, datatype *e){/* 判断队列是否为空 */if(q -> front == q -> rear)return false;/* ⽤e返回队头元素 */*e = q -> sp_queue_array[q -> front];q -> front = (q -> front + 1 ) % MAX_QUEUE_SIZE;return true;}void queue_clear(cir_queue *q){q -> front = q -> rear = 0;}int get_front(cir_queue q, datatype *e){/* 判断队列是否为空 */if (q.front == q.rear)return false;*e = q.sp_queue_array[q.front];return true;}int queue_len(cir_queue q){/* 若front > rear */if(q.front > q.rear)return (q.rear + MAX_QUEUE_SIZE - q.front);elsereturn (q.rear - q.front);}void queue_traverse(cir_queue q, void(*visit)(cir_queue q)) {visit(q);}void visit(cir_queue q){while(q.front != q.rear){printf("%d ",q.sp_queue_array[q.front]);q.front = (q.front + 1) % MAX_QUEUE_SIZE;}}int main(){cir_queue q = queue_init();queue_en(&q, 1);queue_en(&q, 2);queue_en(&q, 3);queue_en(&q, 4);queue_en(&q, 5);printf("此时队长:length=%d\n", queue_len(q));queue_traverse(q, visit);printf("元素6再⼊队\n");queue_en(&q, 6);queue_traverse(q, visit);datatype *x = (datatype *)malloc(sizeof(*x));queue_de(&q,x);printf("出队:%d,此时队长=%d\n", *x, queue_len(q));printf("元素6再⼊队\n");queue_en(&q, 6);printf("length=%d\n", queue_len(q));queue_traverse(q,visit);datatype *e = (datatype *)malloc(sizeof(*e));queue_de(&q,e);printf("queue_de(),e=%d length=%d\n", *e, queue_len(q)); queue_traverse(q, visit);queue_clear(&q);queue_traverse(q, visit);printf("length:%d\n", queue_len(q));}运⾏截图:感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!。

数据结构实验报告队列的表示与实现

数据结构实验报告队列的表示与实现
//从队头到队尾依次对队列Q中的每个元素调用函数visit()。
一旦visit失败, 则操作失败。
链队列:
//单链队列-—队列的链式存储结构
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
if(! Q.front )exit(OVERFLOW); //存储分配失败
Q.front —〉next =NULL;
return OK;}
Status DestoryQueue(LinkQueue &Q){//销毁队列Q, Q不再存在
while(Q.front){
Q。rear=Q.front —〉next;
DestoryQueue(&Q)//初始条件:队列Q已存在
//操作结果: 队列Q被销毁, 不再存在
ClearQueue(&Q)//初始条件:队列Q已存在
//操作结果: 将Q清为空队列
QueueEmpty(Q)//初始条件: 队列Q已存在
//操作结果:若队列Q为空队列, 则返回TRUE, 否则FALSE
QueuePtr front;//队头指针
QueuePtr rear;//队尾指针
}LinkQueue;
//—---—单链队列的基本操作的算法描述—-————
status INitQueue(LinkQueue &Q){//构造一个空队列Q
Q.front=Q。rear=(QueuePtr)malloc(sizeof(QNode));
数据结构实验报告
姓名
学号

实验地点
数学楼

c语言循环队列的实现 c语言循环语句示例

c语言循环队列的实现 c语言循环语句示例

C语言循环队列的实现简介循环队列是一种常见的数据结构,它可以在固定大小的内存空间中实现高效的队列操作。

本文将介绍如何使用C语言实现循环队列,并提供一个基于循环语句的示例。

循环队列的定义循环队列是一种环形缓冲区,它通过前进和后退两个指针来实现队列操作。

在循环队列中,头指针指向队列的第一个元素,尾指针指向队列的最后一个元素的下一个位置。

循环队列的特点有:•在固定大小的内存空间中实现队列操作,有效地利用内存资源。

•通过头指针和尾指针的前进和后退操作,实现队列的插入和删除操作的时间复杂度为O(1)。

•当队列为空时,头指针和尾指针相等;当队列满时,头指针和尾指针相差为1。

循环队列的实现数据结构定义#define MAX_SIZE 10typedef struct {int data[MAX_SIZE];int front;int rear;} CircularQueue;•MAX_SIZE定义了循环队列的最大容量。

•data是循环队列的数据存储区,可以存储整型数据。

•front是头指针,指向队列的第一个元素。

•rear是尾指针,指向队列的最后一个元素的下一个位置。

初始化循环队列void initQueue(CircularQueue *queue) {queue->front = 0;queue->rear = 0;}初始化循环队列时,将头指针和尾指针都指向0,表示循环队列为空。

判断循环队列是否为空int isEmpty(CircularQueue *queue) {return (queue->front == queue->rear);}当头指针和尾指针相等时,循环队列为空。

判断循环队列是否已满int isFull(CircularQueue *queue) {return ((queue->rear + 1) % MAX_SIZE == queue->front); }当头指针和尾指针相差为1时,循环队列已满。

数据结构实验三(循环队列基本操作)题目和源程序

数据结构实验三(循环队列基本操作)题目和源程序

实验三:循环队列基本操作一、实验目的1.熟悉并能实现循环队列的定义和基本操作。

2.了解用队列解决实际应用问题。

二、实验要求1.进行队列的基本操作时要注意队列“先进先出”的特性。

2.复习关于队列操作的基础知识。

3.编写完整程序完成下面的实验内容并上机运行。

4.整理并上交实验报告。

三、实验内容1.任意输入队列长度和队列中的元素值,构造一个顺序循环队列,对其进行清空、插入新元素、返回队头元素以及删除队头元素操作。

2.约瑟夫环的实现:设有n个人围坐在圆桌周围,现从某个位置i 上的人开始报数,数到m 的人就站出来。

下一个人,即原来的第m+1个位置上的人,又从1开始报数,再是数到m的人站出来。

依次重复下去,直到全部的人都站出来,按出列的先后又可得到一个新的序列。

由于该问题是由古罗马著名的史学家Josephus提出的问题演变而来,所以通常称为Josephus 问题。

例如:当n=8,m=4,i=1时,得到的新序列为:4,8,5,2,1,3,7,6编写程序选择循环队列作为存储结构模拟整个过程,并依次输出出列的各人的编号。

/*----------------------------------------* 03_循环队列.cpp -- 循环队列基本操作* 对循环队列的每个基本操作都用单独的函数来实现* 水上飘2009年写----------------------------------------*/// ds03.cpp : 定义控制台应用程序的入口点。

//#include "stdafx.h"#include<iostream>#include<cstdlib>#include<iomanip>#include<ctime>#define MAXQSIZE 100 //最大队列长度using namespace std;typedef struct {int *base; //初始化的动态分配存储空间int front; //头指针,若队列不空,指向队列头元素int rear; //尾指针,若队列不空,指向队列尾元素的下一个位置}SqQueue;//构造一个空队列void InitQueue(SqQueue &Q){Q.base = (int *)malloc(MAXQSIZE * sizeof(int));if(!Q.base) cout << "存储分配失败。

实验二实现顺序栈或循环队列的储存

实验二实现顺序栈或循环队列的储存

实验⼆实现顺序栈或循环队列的储存实验⼆实现顺序栈或循环队列的储存⼀、实验环境Visual Stdio C++6.0⼆、实验⽬的熟练掌握队列和栈的基本操作,并在此基础上进⾏适当的拓展。

三、需求分析1、本实验主要利⽤链式队列的储存模式,来模拟实现⽣活中的离散事件发⽣情况。

该程序是利⽤C++的⾯向对象的⽅法来进⾏处理,对过程进⾏了封装和集成,便于操作与实现。

2、当⽤户发现刚刚键⼊得⼀个字符是错误的时,可以补进⼀个退格符“#”,以表⽰⼀个字符⽆效;如果发现当前键⼊的⾏内差错较多或难以补救,则可以键⼊⼀个退⾏符“@”,以表⽰当前⾏中的字符均⽆效。

3、程序执⾏的命令包括:1、初始化栈2、进栈3、出栈4、清空栈5、释放栈6、判断空栈7、输出栈8、结束四、详细设计1、定义头⽂件#include#include#include#include#include#define STACK_INIT_SIZE 100#define STACKINCREMENT 102、元素类型、节点类型和指针类型struct SqStack{char *base;char *top;int stacksize;};3、初始化栈void InitStack(SqStack &S){S.base=(char*)malloc(STACK_INIT_SIZE *sizeof(char));if (!S.base)exit(1);S.top=S.base;S.stacksize=STACK_INIT_SIZE;}4、进栈void push(SqStack &S,char e){if(S.top-S.base>=S.stacksize){S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char)); if (!S.base) exit(1);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;}5、出栈char pop(SqStack &S,char &e){if (S.top==S.base)return false;e=*--S.top;return e;}6、清空栈void ClearStack(SqStack &S){S.top=S.base;7、释放栈void DestroyStack(SqStack &S){free(S.base);S.top=S.base;}8、判断空栈bool StackEmpty(SqStack &S) {if (S.top==S.base)return true;return false;}9、输出栈void PrintStack(SqStack &S) {char e;while (!StackEmpty(S)){pop(S,e);printf("%d",e);}8、主函数模板void main(){char ch,e;printf("请输⼊字符\n");printf("输⼊#前⼀个字符⽆效\n"); printf("输⼊@清空@之前的栈\n"); SqStack S,D; InitStack(S);InitStack(D);ch=getchar();while (ch!=EOF){while(ch!=EOF&&ch!='\n'){switch(ch)case'#':pop(S,e);break;case'@':ClearStack(S);break;default:push(S,ch);break;}ch=getchar();}while (!StackEmpty(S)){e=pop(S,e);push (D,e);}while (!StackEmpty(D)){e=pop(D,e);printf("%c",e);}ClearStack(S);if(ch!=EOF)ch=getchar();}DestroyStack(S);}五、调试分析这个程序是⾏编译器,运⽤了栈。

循环队列的实现与运算 数据结构

循环队列的实现与运算 数据结构

循环队列的实现与运算数据结构电子信息学院实验报告书课程名: 数据结构题目: 循环队列的实现和运算实验类别设计班级: 学号: 姓名:2011年10 月 17 日《算法设计与分析》实验报告 - 1 - 1、实验题目(1) 掌握队列“先进先出”的特点;(2) 复习队列的入队、出队、插入、删除等基本运算。

(3) 掌握循环队列的特点,以及循环队列的应用。

2、实验内容(1) 在顺序存储结构上实现输出受限制的双端循环队列的入队和出队(只允许队头输出)算法。

(2) 设每个元素表示一个待处理的作业,元素值表示作业的预计时间。

入队列采取简化的短作业优先原则,若一个新提交的作业的预计执行时间小于对头和队尾作业的平均时间,则插入在队头,否则插入在队尾。

(3) 循环队列数据类型:#define MAXLEN 10typedef struct{ int data[MAXLEN];int front,rear;}csequeue;(4)入队作业处理的预计执行时间可以用随机数函数rand()产生,也可以从键盘输入。

3、实验要求(1) 利用C(C++)语言完成算法设计和程序设计。

(2) 上机调试通过实验程序。

(3) 输入数据,检验程序运行结果。

(4) 给出具体的算法分析,包括时间复杂度和空间复杂度等。

(5) 撰写实验报告。

4、实验步骤与源程序? 实验步骤首定义MAXLEN=10,然后初始化队列,再定义数据类型、头、尾指针。

下面定义五个函数,分别是入队函数、出队函数、显示函数和长度计算函数。

在入队时要判断是否队满,队满不能入队。

出队要判断队是否为空,队空不能出队。

判断队列长度的函数,用队尾指针与队首指针之差来计算。

最后的主函数是一个队列菜单和相应的对函数的调用,菜单界面主要通过printf()函数来实现,下面一一对应有switch()语句来实现。

? 源代码#include<stdio.h>#define MAXLEN 10typedef struct{ int data[MAXLEN]; // 定义数据的类型int front,rear; // 定义队头、队尾指针 }csequeue;《算法设计与分析》实验报告 - 2 - csequeue q;void IniQueue() // 初始化队列 { q.front=q.rear=MAXLEN-1; }void InQueue() // 入队函数 { int x ;printf("\n\t\t 输入一个入队的整数数据:");scanf("%d",&x);if (q.front==(q.rear+1) % MAXLEN ){ printf("\n\t\t 队满,不能入队! \n"); return; }q.rear=(q.rear+1) % MAXLEN;q.data[q.rear]=x;printf("\n\t\t 入队成功! \n");}void Outsequeue() // 出队函数 { if (q.front==q.rear){ printf ("\n\t\t 此队列为空! "); return ;} // 队空不能出队else{ q.front=(q.front+1) % MAXLEN;printf("\n\t\t 出队元素为:%d\n",q.data[q.front]); // 输出队头元素return;}}void ShowQueue() // 显示函数 { int k=q.front;if (k==q.rear){ printf("\n\t\t 此队列为空! \n"); return;}printf("\n\t\t 此队列元素为:");do{ k=(k+1)%MAXLEN;printf("%4d",q.data[k]);《算法设计与分析》实验报告 - 3 -} while(k!=q.rear);printf("\n");}int length(){ int k;k=(q.rear-q.front+MAXLEN)% MAXLEN;return k;}void main() // 主函数{ int i=1;int choice;IniQueue();while (i){printf("\n\t\t 循环队列\n");printf("\n\t\t***************************************************"); printf("\n\t\t*** 1----------显示 ***");printf("\n\t\t*** 2----------进队 ***");printf("\n\t\t*** 3----------出队 ***");printf("\n\t\t*** 4----------求队列长度 ***");printf("\n\t\t*** 0----------返回 ***");printf("\n\t\t***************************************************"); printf("\n\n\t\t 请选择菜单号: ");scanf("%d",&choice);switch(choice){case 1: ShowQueue(); break;case 2: InQueue(); break;case 3: Outsequeue(); break;case 4: printf("\n\t\t 队列长度为: %d \n",length());break; case 0: i=0; break;《算法设计与分析》实验报告 - 4 -}}}5、测试数据与实验结果(可以抓图粘贴)《算法设计与分析》实验报告 - 5 - 6、结果分析与实验体会程序可以运行,结果正确,在实验中是对五个函数的调用,我在实验中更清楚的认识到队列跟栈的不同,队列是先进先出,栈是后进先出。

循环队列的基本操作及实现

循环队列的基本操作及实现

循环队列的基本操作及实现循环队列是一种特殊的队列,它可以充分利用数组空间,实现队列的基本操作。

循环队列的基本操作包括入队、出队、判断队列是否为空、判断队列是否已满等。

1. 入队操作入队操作是将元素插入队列尾部的操作。

在循环队列中,需要考虑队列已满的情况。

当队列已满时,需要将队列头部的元素出队,然后再将新元素入队。

入队操作的代码如下:```void enqueue(int data) {if ((rear + 1) % MAX_SIZE == front) {dequeue();}queue[rear] = data;rear = (rear + 1) % MAX_SIZE;}```2. 出队操作出队操作是将队列头部的元素删除的操作。

在循环队列中,需要考虑队列为空的情况。

当队列为空时,无法进行出队操作。

出队操作的代码如下:```int dequeue() {if (front == rear) {return -1;}int data = queue[front];front = (front + 1) % MAX_SIZE;return data;}```3. 判断队列是否为空判断队列是否为空的操作是判断队列中是否还有元素的操作。

在循环队列中,队列为空的条件是队列头部和队列尾部相等。

判断队列是否为空的代码如下:```bool is_empty() {return front == rear;}```4. 判断队列是否已满判断队列是否已满的操作是判断队列中是否还有空间可以插入元素的操作。

在循环队列中,队列已满的条件是队列头部和队列尾部相邻。

判断队列是否已满的代码如下:```bool is_full() {return (rear + 1) % MAX_SIZE == front;}```循环队列的实现可以使用数组来实现,也可以使用链表来实现。

使用数组实现循环队列时,需要定义一个数组和两个指针,分别指向队列头部和队列尾部。

循环队列的实验报告

循环队列的实验报告
Q.front = Q.rear = 0;
return OK;
}
int QueueLength (SqQueue Q){
//返回Q的元素个数,及对列的长度
return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
Status EnQueue (SqQueue &Q,QElemType e){
数据结构实验报告
实验名称:循环队列的的练习操作评分:专业:信管财会班级:一班小组编号:三组
实验内容:
采用顺序存储实现循环队列的初始化、入队、出队等操作。
实验目的:
熟练掌握循序队列的相关操作
实验源程序:(源程序必须调试通过;需有必要的注释;源程序可打印,附在本实验报告之后。)
#include <stdio.h>
QElemType *base;
int front;
int rear;
}SqQueue;
Status InitQueue (SqQueue &Q){
//构造一个空队列Q
Q.base = (QElemType *) malloc (MAXQSIZE * sizeof(QElemType));
if(!Q.base ) exit (OVERFLOW); //存储分配失败
#include <stdlib.h>
#define ERROR 0
#define OK 1
#define OVERFLOW -2
#define MAXQSIZE 100 //最大队列长度
typedef int QElemType;
typedef int Status;
typedef struct {

数据结构:循环队列(C语言实现)

数据结构:循环队列(C语言实现)

数据结构:循环队列(C语⾔实现)⽣活中有⾮常多队列的影⼦,⽐⽅打饭排队,买⽕车票排队问题等,能够说与时间相关的问题,⼀般都会涉及到队列问题;从⽣活中,能够抽象出队列的概念,队列就是⼀个能够实现“先进先出”的存储结构。

队列分为链式队列和静态队列;静态队列⼀般⽤数组来实现,但此时的队列必须是循环队列,否则会造成巨⼤的内存浪费;链式队列是⽤链表来实现队列的。

这⾥讲的是循环队列,⾸先我们必须明确以下⼏个问题⼀、循环队列的基础知识1.循环队列须要⼏个參数来确定循环队列须要2个參数,front和rear2.循环队列各个參数的含义(1)队列初始化时,front和rear值都为零;(2)当队列不为空时,front指向队列的第⼀个元素,rear指向队列最后⼀个元素的下⼀个位置;(3)当队列为空时,front与rear的值相等,但不⼀定为零;3.循环队列⼊队的伪算法(1)把值存在rear所在的位置;(2)rear=(rear+1)%maxsize ,当中maxsize代表数组的长度;程序代码:bool Enqueue(PQUEUE Q, int val){if(FullQueue(Q))return false;else{Q->pBase[Q->rear]=val;Q->rear=(Q->rear+1)%Q->maxsize;return true;}}4.循环队列出队的伪算法(1)先保存出队的值;(2)front=(front+1)%maxsize ,当中maxsize代表数组的长度;程序代码:bool Dequeue(PQUEUE Q, int *val){if(EmptyQueue(Q)){return false;}else{*val=Q->pBase[Q->front];Q->front=(Q->front+1)%Q->maxsize;return true;}}5.怎样推断循环队列是否为空if(front==rear)队列空;else队列不空;bool EmptyQueue(PQUEUE Q){if(Q->front==Q->rear) //推断是否为空return true;elsereturn false;}6.怎样推断循环队列是否为满这个问题⽐較复杂,如果数组的存数空间为7,此时已经存放1,a,5,7,22,90六个元素了,如果在往数组中加⼊⼀个元素,则rear=front;此时,队列满与队列空的推断条件front=rear同样,这种话我们就不能推断队列究竟是空还是满了;解决问题有两个办法:⼀是添加⼀个參数,⽤来记录数组中当前元素的个数;第⼆个办法是,少⽤⼀个存储空间,也就是数组的最后⼀个存数空间不⽤,当(rear+1)%maxsiz=front时,队列满;bool FullQueue(PQUEUE Q){if(Q->front==(Q->rear+1)%Q->maxsize) //推断循环链表是否满,留⼀个预留空间不⽤return true;elsereturn false;}附录:queue.h⽂件代码:#ifndef __QUEUE_H_#define __QUEUE_H_typedef struct queue{int *pBase;int front; //指向队列第⼀个元素int rear; //指向队列最后⼀个元素的下⼀个元素int maxsize; //循环队列的最⼤存储空间}QUEUE,*PQUEUE;void CreateQueue(PQUEUE Q,int maxsize);void TraverseQueue(PQUEUE Q);bool FullQueue(PQUEUE Q);bool EmptyQueue(PQUEUE Q);bool Enqueue(PQUEUE Q, int val);bool Dequeue(PQUEUE Q, int *val);#endifqueue.c⽂件代码:#include<stdio.h>#include<stdlib.h>#include"malloc.h"#include"queue.h"/***********************************************Function: Create a empty stack;************************************************/void CreateQueue(PQUEUE Q,int maxsize){Q->pBase=(int *)malloc(sizeof(int)*maxsize);if(NULL==Q->pBase){printf("Memory allocation failure");exit(-1); //退出程序}Q->front=0; //初始化參数Q->rear=0;Q->maxsize=maxsize;}/***********************************************Function: Print the stack element;************************************************/void TraverseQueue(PQUEUE Q){int i=Q->front;printf("队中的元素是:\n");while(i%Q->maxsize!=Q->rear){printf("%d ",Q->pBase[i]);i++;}printf("\n");}bool FullQueue(PQUEUE Q){if(Q->front==(Q->rear+1)%Q->maxsize) //推断循环链表是否满,留⼀个预留空间不⽤ return true;elsereturn false;}bool EmptyQueue(PQUEUE Q){if(Q->front==Q->rear) //推断是否为空return true;elsereturn false;}bool Enqueue(PQUEUE Q, int val){if(FullQueue(Q))return false;else{Q->pBase[Q->rear]=val;Q->rear=(Q->rear+1)%Q->maxsize;return true;}}bool Dequeue(PQUEUE Q, int *val){if(EmptyQueue(Q)){return false;}else{*val=Q->pBase[Q->front];Q->front=(Q->front+1)%Q->maxsize;return true;}}。

循环顺序队列实现代码

循环顺序队列实现代码

循环顺序队列实现代码以下是循环顺序队列的实现代码:```c++#include <iostream>using namespace std;//定义循环顺序队列的类class CircularQueuepublic:CircularQueue(int capacity);~CircluarQueue(;void enqueue(int data);int dequeue(;bool isEmpty(;bool isFull(;int getFront(;int getRear(;private:int* queue;int capacity;int front;int rear;};//初始化循环顺序队列CircularQueue::CircularQueue(int capacity) this->capacity = capacity;queue = new int[capacity];front = -1; // 队列为空时,front指向-1 rear = -1; // 队列为空时,rear指向-1//销毁循环顺序队列CircularQueue::~CircularQueudelete[] queue;//入队操作void CircularQueue::enqueue(int data)//队列已满if (isFull()cout << "Queue is full!" << endl;return;}// 队列为空,同时将front指向0if (isEmpty()front = 0;}//队尾指针循环前进rear = (rear + 1) % capacity; queue[rear] = data;//出队操作int CircularQueue::dequeuint data;//队列为空if (isEmpty()cout << "Queue is empty!" << endl; return -1;}data = queue[front];//队列中只有一个元素if (front == rear)front = -1;rear = -1;}elsefront = (front + 1) % capacity; // 队头指针循环前进}return data;//判断队列是否为空bool CircularQueue::isEmptreturn (front == -1 && rear == -1);//判断队列是否已满bool CircularQueue::isFulreturn ((rear + 1) % capacity == front);//获取队头元素int CircularQueue::getFronif (isEmpty()cout << "Queue is empty!" << endl;return -1;}return queue[front];//获取队尾元素int CircularQueue::getReaif (isEmpty()cout << "Queue is empty!" << endl;return -1;}return queue[rear];int maiCircularQueue queue(5); // 初始化容量为5的循环顺序队列queue.enqueue(1);queue.enqueue(2);queue.enqueue(3);queue.enqueue(4);queue.enqueue(5);cout << "Front: " << queue.getFront( << ", Rear: " << queue.getRear( << endl;cout << "Dequeue: " << queue.dequeue( << endl;cout << "Front: " << queue.getFront( << ", Rear: " << queue.getRear( << endl;queue.enqueue(6);cout << "Front: " << queue.getFront( << ", Rear: " << queue.getRear( << endl;return 0;```以上是基于C++的循环顺序队列的实现代码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6、编写主程序调用上面的函数,加以测试。
数据输入与输出要求
输入示例:
输入要入队的元素个数:
8
10
0
输出示例:
41 67 34 0 69 24 78 58
41 67 34 0 69 24 78 58
62 64 5 45 81 27 61 91 95 42
62 64 5 45 81 27 61 91 95 42
{
if(Q.count!=0)return 1;
else return 0;
}
(3)入队列
QueueAppend(SeqCQueue *Q,DataType x)
int QueueAppend(SeqCQueue *Q,DataType x) /*把数据元素值x插入顺序循环队列Q的队尾,成功返回1,失败则返回0*/
}
}
(4)出队列
QueueDelete(SeqCQueue*Q,DataType *d)
int QueueDelete(SeqCQueue*Q,DataType *d) /*删除顺序循环队列Q的队头元素并赋给d,成功返回1,失败返回0*/
{
if(Q->count==0)
{ printf(“队列已空无数据元素出队列!\n”);
{
if(Q.count==0)
{printf(“队列已空无数据元素可取!\n”);
return 0;
}
else {
*d=Q.queue[Q.front];
return 1;
}
}
调试情况
教师评阅
教师签字:日期:
实验1.2顺序循环队列的实现
实验目的
1.熟悉并能实现顺序循环队列的定义和基本操作。
2.了解用队列解决实际应用问题。
实验要求
1、在给定的存储结构和空间大小的条件下,定义循环队列的初始化函数;
2、在少用一个单元的条件下定义队列的入队函数;
3、定义队列的出队函数;
4、定义判断队空函数;
5、定义销毁队列函数;
请按任意键继续. . .
数据结构设计
typedefstructSeqQueue
{
private:
int*base;/*初始化时动态分配空间*/
intrear , front;/*队头队尾指示器*/
intMaxsize;
}SeqQueue
voidSeqQueue(intsz );//初始化
boolEnQueue(inte);//入队
return 0;
}
else {
*d=Q->queue[Q->front];
Q->front=(Q->front+1)%MaxQueueSize;
Q->count--;
return 1;
}
}
(5)取队头数据元素
QueueGet(SeqCQueue Q,DataType *d)
int QueueGet(SeqCQueue Q,DataType *d) /*取顺序循环队列Q的当前队头元素并赋给d,成功返回1,失败返回0*/
int rear; /*队尾指针*/
int front; /*队头指针*/
int count; /*计数器*/
}SeqCQueue;
采用计数器法判断队列空和满的顺序循环队列的算法实现如下:
(1)初始化
QueueInitiate(SeqCQueue *Q)
void QueueInitiate(SeqCQueue *Q) /*初始化顺序循环队列Q*/
boolDeQueue (int&e);//出队
voidDestroyQueue( );//销毁队列
boolIsEmpty();//判断队空
voidMakeEmpty();
};
程序实现
3.顺序循环队列的实现
根据对顺序循环队列的分析,其结构体定义如下:
typedef struct {
DataType queue[MaxQueueSize];
{
if(Q->count>0&&Q->rear==Q->front) /*判断队列满否*/
{
printf(“队列已满无法插入!\n”);
return 0;
}
else{
Q->queue[Q->rear]=x;
Q->rear=(Q->rear+1)%MaxQueueSize;
Q->count++;
return 1;
{
Q->rear=0; /*定义初始化队尾指针下标值*/
Q->front=0; /*定义初始化头指针下标值*/
Q->count=0; /*定义初始化计数器值*/
}
(2)非空否
QueueNotEmpty(SeqCQueue Q)
int QueueNotEmpty(SeqCQueue Q) /*判断顺序循环队列Q非空否,非空返回1,否则返回0*/
相关文档
最新文档