循环队列的学习解析以及C语言实现

合集下载

数据结构实验报告(C语言)(强力推荐)

数据结构实验报告(C语言)(强力推荐)

数据结构实验实验内容和目的:掌握几种基本的数据结构:集合、线性结构、树形结构等在求解实际问题中的应用,以及培养书写规范文档的技巧。

学习基本的查找和排序技术。

让我们在实际上机中具有编制相当规模的程序的能力。

养成一种良好的程序设计风格。

实验教材:数据结构题集(C语言版)清华大学出版社2007年实验项目:实验一、栈和循环队列㈠、实验内容:①栈掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。

本程序采用的是链栈结构,具有初始化一个栈、PUSH、POP、显示所有栈里的元素四个功能。

②循环队列掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,学会循环队列的实现,以便在实际问题背景下灵活运用。

本程序具有初始化一个队列、入队、出队、显示队列的所有元素、队列长度五个功能。

㈡、实验代码①栈程序代码:#include <stdio.h>#include <malloc.h>#define Stack_Size 6#define ERROR 0#define OK 1typedef int SElemType;typedef struct SNode{SElemType data;struct SNode *next;}SNode,*LinkStack;int CreatTwo(LinkStack &head,int n){int i;SNode *p;head=(LinkStack)malloc(sizeof(SNode));head->next=NULL;printf("请输入数据(数字):\n");for(i=n;i>0;--i){p=(SNode *)malloc(sizeof(SNode));scanf("%d",&p->data);p->next=head->next;head->next=p;}return 1;}int menu_select(){int sn;for(;;){scanf("%d",&sn);if(sn<1||sn>6)printf("\n\t输入错误,请重新输入\n");elsebreak;}return sn;}int Push(LinkStack &top,SElemType e){SNode *q;q=(LinkStack)malloc(sizeof(SNode));if(!q){printf("溢出!\n");return(ERROR);}q->data=e;q->next=top->next;top->next=q;return(OK);}int Pop(LinkStack &top,SElemType &e){SNode *q;if(!top->next){printf("error!\n");return(ERROR);}e=top->next->data;q=top->next;top->next=q->next;free(q);return(OK);}void main(){ int e;LinkStack top;printf("1.初始化一个栈;\n2.PUSH;\n3.POP;\n4.显示所有栈里的元素;\n5.结束;\n");while(1){switch(menu_select()){case 1:if(CreatTwo(top,Stack_Size))printf("Success!\n");break; case 2:printf("Push:\n");scanf("%d",&e);if(Push(top,e))printf("Success!\n");break;case 3:if(Pop(top,e))printf("Success!\n");printf("%d\n",e);break;case 4:LinkStack p;printf("所有栈里的元素:\n");p=top;while(p->next){p=p->next;printf("%7d",p->data);}printf("\n");break;case 5:return;}}}运行结果:②循环队列程序代码:#include<stdlib.h>#include<stdio.h>#define OVERFLOW -1#define OK 1#define ERROR 0#define MAXSIZE 100typedef struct{int *elem;//队列存储空间int front;int rear;}SqQueue;//判断选择是否正确int menu_select(){int sn;for(;;){scanf("%d",&sn);if(sn<1||sn>6)printf("\n\t输入错误,请重新输入\n");elsebreak;}return sn;}//参数(传出)SqQueue &Q,循环队列(空)int InitQueue(SqQueue &Q){Q.elem=(int *)malloc(MAXSIZE*sizeof(int));if(!Q.elem)exit(OVERFLOW);Q.front=Q.rear=-1;for(int i=0;i<MAXSIZE;i++)Q.elem[i]=-1;return OK;}//返回Q的元素个数int QueueLength(SqQueue Q){return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;}//显示队列的元素void Display(SqQueue Q){for(int i=0;i<=QueueLength(Q);i++)if(Q.elem[i]!=-1)printf("%d ",Q.elem[i]);printf("\n");}//入队int EnQueue(SqQueue &Q,int e){Q.rear=(Q.rear+1)%MAXSIZE;if(Q.rear==Q.front)return ERROR;Q.elem[Q.rear]=e;return OK;}//出队int DeQueue(SqQueue &Q,int &e){if(Q.front==Q.rear)return ERROR;e=Q.elem[Q.front+1];Q.elem[Q.front+1]=-1;Q.front=(Q.front+1)%MAXSIZE;return OK;}void main(){SqQueue Q;InitQueue(Q);int elem,e;printf("请输入队列元素(以0结束):\n");scanf("%d",&elem);while(elem!=0){EnQueue(Q,elem);scanf("%d",&elem);}printf("队列为:\n");Display(Q);printf("1.初始化一个队列;\n2.入队;\n3.出队;\n4.显示队列的所有元素;\n5.队列长度:\n6.结束;\n");while(1){switch(menu_select()){case 1:printf("请输入队列元素(以0结束):\n");scanf("%d",&elem);while(elem!=0){EnQueue(Q,elem);scanf("%d",&elem);}printf("队列为:\n");Display(Q);fflush(stdin);break;case 2:scanf("%d",&elem);EnQueue(Q,elem);printf("队列为:\n");Display(Q);fflush(stdin);break;case 3:DeQueue(Q,elem);printf("队列为:\n");Display(Q);break;case 4:printf("\n队列的所有元素:\n");Display(Q);break;case 5:printf("%d\n",QueueLength(Q));break;case 6:return;}}}运行结果:实验二、数组㈠、实验内容:数组一般不做插入或删除操作,也就是说,一旦建立了数组,则结构中的数据元素个数和元素之间的关系就不再发生变动。

循环队列是什么结构

循环队列是什么结构

循环队列是什么结构引言:在计算机科学领域中,队列是一种简单而常见的数据结构,它按照先进先出(FIFO)的原则管理数据。

循环队列是队列的一种特殊形式,将队列的首尾连接起来,形成一个环。

本文将详细介绍循环队列的定义、实现和应用。

一、循环队列的定义循环队列是一种通过环形缓冲区实现的线性数据结构,具有固定大小。

它包含一个数组,用于存储数据元素,以及两个指针front和rear,分别指向队列的头部和尾部。

特点:1. 队列为空时,front和rear指向同一个位置;2. 队列满时,front和rear指向相邻位置;3. 队列长度为数组的长度减1。

二、循环队列的实现1. 初始化:创建一个空数组,并将front和rear指针初始化为0。

2. 入队操作:将元素插入rear指针指向的位置,然后将rear指针右移一位。

如果rear指针超过数组边界,则将rear指针重置为0。

3. 出队操作:将front指针指向的元素返回,并将front指针右移一位。

如果front指针超过数组边界,则将front指针重置为0。

4. 队列判空:如果front和rear指向同一个位置,则队列为空。

5. 队列判满:如果rear指针的下一个位置是front指针,则队列为满。

三、循环队列的优势相比于普通队列,循环队列具有以下几个优势:1. 优化了空间利用:循环队列通过环形缓冲区的方式实现,充分利用了数据存储空间,避免了普通队列数组一旦填满就无法再存入元素的问题。

2. 提高了入队和出队的效率:循环队列通过指针的移动实现元素的插入和删除,无需移动整个队列,并且时间复杂度为O(1),相比于普通队列的O(n)效率更高。

3. 简化了队列的操作:循环队列可以自动调整指针的位置,无需移动整个队列,更加简洁高效。

四、循环队列的应用循环队列在实际应用中具有广泛的用途,下面列举了其中几个常见的应用场景:1. 生产者消费者模型:循环队列可以用来实现线程间的数据传递,生产者线程将数据入队,消费者线程从队列中取出数据进行处理。

数据结构c语言循环队列定义

数据结构c语言循环队列定义

数据结构c语言循环队列定义1. 引言在程序设计中,经常需要使用队列这种数据结构。

队列是一种先进先出(First In First Out, FIF)的数据结构,类似于排队买票或取快餐的过程,先到先服务。

相比于其他数据结构,队列的操作比较简单,也容易理解和实现。

本文将介绍一种常见的队列类型——循环队列,并使用c语言实现。

2. 循环队列的定义循环队列是一种特殊的队列类型,它在数组的基础上实现。

其实现方式是将数组的首尾相连,形成一个环状。

这样在操作队列时,当往队列中添加元素时,如果队列尾指针到达数组末尾,则在数组头部继续添加元素。

当从队列中删除元素时,如果队列头指针到达数组末尾,则在数组头部继续删除元素。

这样循环下去,队列就具有了循环的特性,即循环队列。

3. 循环队列c语言实现由于循环队列是在数组的基础上实现的,因此我们定义一个数组来存储队列元素,再定义队列头和队列尾指针来指向队列中的首尾元素。

具体c语言实现如下:```define MAXSIZE 100 // 队列最大容量typedef int ElemType; // 元素类型定义typedef struct {ElemType data[MAXSIZE]; // 存储元素的数组int front; // 队列头指针int rear; // 队列尾指针} CircleQueue;// 初始化循环队列void InitQueue(CircleQueue *q) {q->front = q->rear = 0; // 头尾指针初始化为0 }// 判断循环队列是否为空bool IsEmpty(CircleQueue *q) {return q->front == q->rear;}// 判断循环队列是否为满bool IsFull(CircleQueue *q) {return (q->rear + 1) % MAXSIZE == q->front;}// 入队操作bool EnQueue(CircleQueue *q, ElemType e) {// 队列已满,无法添加元素if (IsFull(q)) {return false;}q->data[q->rear] = e; // 将元素添加到队列尾部q->rear = (q->rear + 1) % MAXSIZE; // 队列尾指针后移一位return true;}// 出队操作bool DeQueue(CircleQueue *q, ElemType *e) {// 队列为空,无法删除元素if (IsEmpty(q)) {return false;}*e = q->data[q->front]; // 将队列头部元素取出q->front = (q->front + 1) % MAXSIZE; // 队列头指针后移一位return true;}```以上是循环队列的c语言实现,可以通过以上函数对循环队列进行初始化、判断队列是否为空或是否为满,入队和出队操作。

循环队列实验报告心得与体会

循环队列实验报告心得与体会

循环队列实验报告心得与体会循环队列是数据结构中一个非常经典的概念,相对于其他队列结构,循环队列可以优化存储空间的使用,减少空间的浪费。

循环队列的操作也比较高效,能够快速执行入队和出队操作。

本次实验,我们对循环队列结构进行了深入的了解与实践,更深刻地认识到了数据结构的重要性。

在实验中,我们首先对循环队列的基本概念进行了学习,通过查阅相关资料和教材,我们了解到循环队列是一种环形的特殊队列,其队尾指针在达到数组的末尾时,再从数组的第一个位置开始存储数据,如此循环下去。

这样一来,就可以充分利用数组中的元素,减少不必要的空间浪费,提高队列结构的空间利用率。

在深入了解循环队列的概念之后,我们开始实现循环队列的基本操作,包括入队、出队、判空、判满等。

通过实现这些基础操作,我们更加熟悉了循环队列的内部结构和操作流程,同时也掌握了程序设计中的一些基本思路和技巧。

在实验过程中,我们还注意到了循环队列一些常见的问题和局限性。

当队列元素数量达到数组大小时,会出现队列满的情况,此时需要进行特殊处理。

由于循环队列是基于数组实现的,所以其大小是固定的,不能动态调整,这也是循环队列的一个缺陷。

在实验结束后,我们对循环队列的性能进行了一些简单分析。

通过测试,我们发现循环队列在入队和出队操作的时间复杂度都是O(1),即不受元素数量的影响,具有较高的效率。

这进一步证明了循环队列是一种高效的数据结构。

本次实验让我们深入了解了循环队列的内部结构和基本操作,也发现了循环队列存在的问题和局限性。

通过这次实验的实践,我们进一步理解了数据结构的重要性,同时也锻炼了自己的程序设计能力和思维能力。

除了实现循环队列的基本操作,我们还对循环队列进行了扩展,添加了一些实用的操作,比如获取队列长度、获取队首和队尾元素等。

这些操作虽然不是必要的,但是在实际的应用中却非常实用,可以方便我们处理队列中的元素。

我们在实验中还掌握了一些编程技巧和调试工具,来提高程序的效率和可靠性。

c语言队列数据结构

c语言队列数据结构

c语言队列数据结构队列是一种常见的数据结构,它遵循先进先出(FIFO)的原则。

在C语言中,我们可以使用数组或链表来实现队列数据结构。

本文将介绍C语言中队列的实现方法及其应用。

一、数组实现队列数组是一种简单且常用的数据结构,可以用来实现队列。

在C语言中,我们可以使用数组来创建一个固定大小的队列。

下面是一个使用数组实现队列的示例代码:```c#include <stdio.h>#define MAX_SIZE 100int queue[MAX_SIZE];int front = -1;int rear = -1;void enqueue(int data) {if (rear == MAX_SIZE - 1) {printf("队列已满,无法插入元素。

\n");return;}if (front == -1) {front = 0;}rear++;queue[rear] = data;}void dequeue() {if (front == -1 || front > rear) {printf("队列为空,无法删除元素。

\n"); return;}front++;}int getFront() {if (front == -1 || front > rear) {printf("队列为空。

\n");return -1;}return queue[front];}int isEmpty() {if (front == -1 || front > rear) {return 1;}return 0;}int main() {enqueue(1);enqueue(2);enqueue(3);printf("队列的第一个元素:%d\n", getFront());dequeue();printf("队列的第一个元素:%d\n", getFront());return 0;}```在上述代码中,我们使用了一个数组`queue`来存储队列的元素。

c语言中循环结构

c语言中循环结构

c语言中循环结构循环结构在C语言中是一种非常重要的控制结构,它能够让程序重复执行某段代码,实现代码的复用和效率的提高。

循环结构主要有三种形式:while循环、do-while循环和for循环。

1. while循环while循环是一种先判断条件再执行的循环结构。

它的语法形式如下:```while (条件) {循环体语句;}```在循环开始之前,先判断条件是否成立,如果条件成立,则执行循环体语句;否则,跳过循环体语句,继续执行后面的代码。

循环体执行完毕后,再次判断条件是否成立,如果成立,则继续执行循环体语句,直到条件不成立为止。

2. do-while循环do-while循环和while循环类似,不同之处在于它是先执行循环体,再判断条件是否成立。

它的语法形式如下:```do {循环体语句;} while (条件);```在循环开始时,先执行循环体语句,然后判断条件是否成立,如果条件成立,则继续执行循环体语句,否则跳出循环。

3. for循环for循环是一种常用的循环结构,它的语法形式如下:```for (初始化表达式; 条件表达式; 更新表达式) {循环体语句;}```for循环的执行顺序是先执行初始化表达式,然后判断条件是否成立,如果条件成立,则执行循环体语句;执行完循环体语句后,再执行更新表达式,再次判断条件是否成立,以此类推。

当条件不成立时,跳出循环。

循环结构的应用非常广泛,可以用于处理各种重复性任务,比如计算数列的和、输出九九乘法表等。

下面以计算数列的和为例,演示这三种循环结构的使用。

我们来看一下使用while循环计算数列的和的代码:```#include <stdio.h>int main() {int n = 10; // 数列的长度int sum = 0; // 数列的和int i = 1; // 循环变量while (i <= n) {sum += i;i++;}printf("数列的和为:%d\n", sum);return 0;}```在这段代码中,我们使用while循环从1开始累加到n,得到数列的和。

计算机二级循环队列

计算机二级循环队列

计算机二级循环队列循环队列是一种特殊的队列数据结构,它具有先进先出的特性,同时还能够充分利用数组的空间。

在计算机二级考试中,循环队列是一个重要的概念,掌握它对于理解和应用队列相关的算法和数据结构至关重要。

在循环队列中,队列的元素被存储在一个数组中,通过两个指针front和rear来标记队列的头部和尾部。

与普通队列不同的是,当rear指针到达数组的末尾时,它会从数组的开头重新开始,形成一个循环。

这样一来,队列的元素可以循环利用数组的空间,避免了因为队列头部元素出队而留下的空间浪费。

循环队列的实现需要考虑以下几个关键点:1. 初始化队列:在开始使用循环队列之前,需要初始化队列的大小和指针。

一般来说,我们会将front和rear都初始化为0,表示队列为空。

2. 入队操作:当要向队列中增加一个元素时,我们首先需要检查队列是否已满。

如果rear的下一个位置等于front,那么说明队列已满,无法再添加元素。

否则,我们将新的元素添加到rear所在的位置,并将rear指针后移一位。

这样一来,队列中的元素就会不断向后循环。

3. 出队操作:当要从队列中删除一个元素时,我们首先需要检查队列是否为空。

如果front等于rear,那么说明队列为空,无法再删除元素。

否则,我们将front指针后移一位,表示队列的头部元素已经出队。

4. 循环条件的判断:在循环队列中,判断队列是否为空的条件是front等于rear,判断队列是否已满的条件是(rear + 1) % 数组长度等于front。

这样可以确保队列的循环特性。

循环队列的应用非常广泛,特别是在需要处理大量数据的场景下。

例如,在操作系统中,循环队列可以用于实现缓冲区,提高数据的读写效率。

又如,在计算机网络中,循环队列可以用于实现路由器的缓存队列,确保数据的有序传输。

总结一下,计算机二级循环队列是一种特殊的队列数据结构,通过循环利用数组的空间,实现队列元素的先进先出。

掌握循环队列的实现原理和操作方法对于理解和应用队列相关的算法和数据结构至关重要。

C语言中的循环结构

C语言中的循环结构

C语言中的循环结构循环结构是编程中常用的控制结构之一,它允许程序重复执行特定的代码块,直到满足某个条件为止。

在C语言中,有三种主要的循环结构:`for`循环、`while`循环和`do-while`循环。

首先,让我们来看一下`for`循环。

`for`循环是C语言中最常用的循环结构之一,它通常用于已知循环次数的情况。

`for`循环的语法如下:```for (初始化表达式; 条件表达式; 更新表达式) {// 循环体}```其中,初始化表达式用于初始化循环计数器,条件表达式用于判断循环是否继续执行,更新表达式用于更新循环计数器。

例如,下面的代码展示了一个简单的`for`循环,它会打印1到5的数字:```for (int i = 1; i <= 5; i++) {printf("%d\n", i);}```接下来,让我们来看一下`while`循环。

`while`循环用于在满足条件的情况下重复执行代码块,直到条件不再成立。

`while`循环的语法如下:while (条件表达式) {// 循环体}````while`循环会在每次循环开始前先检查条件表达式,如果条件为真,则执行循环体。

例如,下面的代码展示了一个简单的`while`循环,它会打印1到5的数字:```int i = 1;while (i <= 5) {printf("%d\n", i);i++;}```最后,让我们来看一下`do-while`循环。

`do-while`循环与`while`循环类似,不同之处在于`do-while`循环会先执行一次循环体,然后再检查条件是否成立。

`do-while`循环的语法如下:```do {// 循环体} while (条件表达式);`do-while`循环会先执行循环体,然后再检查条件表达式。

即使条件不成立,循环体至少会被执行一次。

例如,下面的代码展示了一个简单的`do-while`循环,它会打印1到5的数字:```int i = 1;do {printf("%d\n", i);i++;} while (i <= 5);```总的来说,循环结构在C语言中是非常重要的,它可以使程序更加灵活和高效。

8584 循环队列的基本操作

8584 循环队列的基本操作

8584 循环队列的基本操作
循环队列是一种常见的数据结构,它可以有效地处理排队问题。

在循环队列中,队列的元素是排成一条线的,队首和队尾相连。

队列
的长度是固定的,一旦队列满了,就不能再插入元素。

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

创建队列时需要指定队列的长度和数组大小,
而入队和出队操作则是向队列的尾部(队尾)添加元素和从队首删除
元素。

当队列为空时,即队尾和队首指针相同时,出队操作不可用。

当队列已满时,入队操作将无法添加更多元素。

在循环队列的实现中,我们需要使用一个数组来存储队列中的元素。

因为循环队列的队首和队尾指针是相连的,所以我们可以使用取
模操作来实现队列的循环。

这样,当队首或队尾指针到达数组末尾时,它会自动回到数组开头。

循环队列的实现是相对比较简单的,但是在使用时需要注意以下
几个问题:
1. 队列的长度必须是固定的,一旦创建后不能改变。

2. 队列长度为n,则数组大小应该为n+1,因为队列中有一个空
位置没有使用。

3. 为了避免队列中元素混乱,应该尽可能地利用数组中的空位置。

4. 创建队列后,队列指针要初始化为0。

综上所述,循环队列是一种高效的数据结构,它可以很好地解决排队问题。

在实现循环队列时,需要注意队列长度的固定、数组大小的确认、队列的指针初始化等细节问题。

如果我们能够合理地使用循环队列,就能够更加高效地解决掉队列问题。

实现循环队列的入队出队等基本操作

实现循环队列的入队出队等基本操作

实现循环队列的入队出队等基本操作循环队列是一种特殊的队列数据结构,通过循环利用数组空间来实现入队和出队操作。

它的特点是队头和队尾可以在数组上循环移动,从而充分利用数组空间,提高队列的效率。

下面将详细介绍循环队列的实现。

1.定义循环队列的数据结构循环队列的数据结构由以下几个成员组成:-一个固定大小的数组,用于存储队列元素。

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

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

2.初始化循环队列首先,我们需要在内存中分配一个固定大小的数组,并初始化队头和队尾指针为0。

```pythondef __init__(self, k: int):self.queue = [0] * kself.front = self.rear = 0```3.入队操作入队操作会在队尾插入一个新元素,并将队尾指针后移一位。

如果队列已满,则入队操作会失败。

```pythondef enqueue(self, value: int) -> bool:if self.isFull(:return Falseself.queue[self.rear] = valueself.rear = (self.rear + 1) % len(self.queue)return True```4.出队操作出队操作会删除队头元素,并将队头指针后移一位。

如果队列为空,则出队操作会失败。

```pythondef dequeue(self) -> bool:if self.isEmpty(:return Falseself.front = (self.front + 1) % len(self.queue)return True```5.判空操作判空操作会检查队头和队尾指针是否相等,如果相等则说明队列为空。

```pythondef isEmpty(self) -> bool:return self.front == self.rear```6.判满操作判满操作会检查队尾指针的下一位是否等于队头指针,如果相等则说明队列已满。

循环队列判空和判满条件

循环队列判空和判满条件

循环队列判空和判满条件循环队列是一种经常使用的数据结构,它具有环形的特点。

在实际应用中,判断循环队列的空和满条件非常重要,因为只有在了解了这些条件后,我们才能正确地对循环队列进行操作。

本文将介绍循环队列的判空和判满条件,并提供相应的代码示例。

一、循环队列的定义和基本操作循环队列是一种使用数组实现的队列,它的特点是充分利用数组空间,将队列头尾相连,形成一个环。

下面是循环队列的基本操作:1. 初始化:创建一个队列,并设置队列的头指针(front)和尾指针(rear)为0。

2. 入队操作:将元素插入到队列的尾部,并将尾指针(rear)向后移动一位。

3. 出队操作:删除队列的头部元素,并将头指针(front)向后移动一位。

4. 判空:当头指针(front)和尾指针(rear)相等时,表示队列为空。

5. 判满:当尾指针(rear)的下一位等于头指针(front)时,表示队列已满。

二、循环队列判空和判满条件的分析1. 判空条件对于判断循环队列是否为空,我们只需判断头指针(front)和尾指针(rear)是否相等即可。

如果相等,表示队列为空;反之,队列不为空。

2. 判满条件判断循环队列是否已满需要特殊处理。

当队列尾指针(rear)的下一位等于队列头指针(front)时,表示队列已满。

由于是循环队列,尾指针(rear)在移动时会环绕到数组的开头,因此我们需要通过模运算来计算下一位的位置。

三、循环队列判空和判满条件的代码实现(C++示例)```cpp#include<iostream>using namespace std;const int MaxSize = 100; // 循环队列的最大容量class CircularQueue {private:int queue[MaxSize]; // 队列数组int front; // 头指针int rear; // 尾指针public:CircularQueue() {front = rear = 0; // 初始化队列}// 入队操作void enqueue(int value) {if ((rear + 1) % MaxSize == front) {cout << "Queue is full. Unable to enqueue." << endl; return;}queue[rear] = value;rear = (rear + 1) % MaxSize;}// 出队操作void dequeue() {if (front == rear) {cout << "Queue is empty. Unable to dequeue." << endl; return;}int value = queue[front];front = (front + 1) % MaxSize;cout << "Dequeued element: " << value << endl; }// 判空操作bool isEmpty() {return front == rear;}// 判满操作bool isFull() {return (rear + 1) % MaxSize == front;}};int main() {CircularQueue queue;queue.enqueue(1);queue.enqueue(2);queue.enqueue(3);queue.dequeue();queue.dequeue();queue.dequeue();queue.dequeue();return 0;}```四、总结循环队列是一种常用的数据结构,因其能够充分利用数组空间并实现高效的入队和出队操作而被广泛应用。

队列的c语言程序

队列的c语言程序

队列的c语言程序队列的C语言程序队列是计算机科学中非常重要的数据结构之一,它可以用来实现各种算法。

在C语言中,队列可以使用指针和数组两种方式进行实现。

本文将介绍这两种实现方法。

数组实现队列数组实现队列的基本思想是:定义一个数组来保存队列中的元素,并通过两个指针front和rear来表示队首和队尾。

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

入队操作时,将元素添加到队尾并将rear指针向后移动一位;出队操作时,将队首元素的值返回并将front指针向后移动一位。

下面是一个简单的数组实现队列的C语言代码:```#define MAXSIZE 100 // 队列的最大长度int queue[MAXSIZE]; // 队列数组int front = 0; // 队首指针int rear = 0; // 队尾指针// 判断队列是否为空int is_empty() {return front == rear;}// 判断队列是否已满int is_full() {return rear == MAXSIZE;}// 入队操作void enqueue(int item) {if (is_full()) {printf("Queue is full!\n"); return;}queue[rear++] = item;}// 出队操作int dequeue() {if (is_empty()) {printf("Queue is empty!\n"); return -1;}int item = queue[front++];return item;}```指针实现队列指针实现队列的基本思想是:定义一个链表来保存队列中的元素,并通过两个指针head和tail来表示队首和队尾。

head指向队列的第一个元素,tail指向队列的最后一个元素。

入队操作时,将元素添加到队尾,并更新tail指针;出队操作时,将队首元素的值返回并更新head指针。

循环队列push_back实现原理

循环队列push_back实现原理

循环队列push_back实现原理循环队列是一种经典的数据结构,它可以实现高效的队列操作。

在循环队列中,我们可以使用push_back操作来向队列尾部插入新的元素。

本文将介绍循环队列的原理,并详细解释push_back操作的实现过程。

一、循环队列的概念和原理循环队列是一种环形的数据结构,它的底层是一个数组。

循环队列的特点是,当队列的尾部指针指向数组的最后一个位置时,如果队列仍有空闲空间,那么新的元素将被插入到数组的第一个位置,形成一个循环。

这样一来,我们就可以循环利用数组的空间,避免了数组中元素的搬移操作。

循环队列通常由两个指针来表示,一个是队头指针front,一个是队尾指针rear。

初始时,它们都指向数组的第一个位置。

队列中的元素从队头指针的位置开始,依次向后排列,直到队尾指针的位置。

当队列为空时,front和rear指针相等,当队列满时,rear指针指向的位置是front指针的前一个位置。

二、push_back操作的实现过程push_back操作是向循环队列的尾部插入新的元素。

它的具体实现过程如下:1. 首先,判断队列是否已满。

如果队列已满,即rear指针的下一个位置是front指针的位置,表示队列已满,无法插入新的元素。

在这种情况下,我们可以选择两种处理方式:一种是抛出异常,通知调用者队列已满;另一种是自动扩容,重新分配更大的数组空间。

这里我们选择抛出异常的方式。

2. 如果队列未满,将新的元素插入到rear指针的位置,并将rear 指针后移一位。

具体操作如下:(1)将新的元素赋值给rear指针指向的位置:queue[rear] = element;(2)将rear指针后移一位:rear = (rear + 1) % queueSize;这里使用取模运算来实现循环。

3. 返回插入成功的提示信息。

三、总结本文介绍了循环队列的概念和原理,并详细解释了push_back操作的实现过程。

循环队列通过循环利用数组的空间,实现了高效的队列操作。

数据结构:循环队列(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代表数组的长度;程序代码:[cpp]view plaincopy1.bool Enqueue(PQUEUE Q, int val)2.{3.if(FullQueue(Q))4.return false;5.else6. {7. Q->pBase[Q->rear]=val;8. Q->rear=(Q->rear+1)%Q->maxsize;9.return true;10. }11.}4.循环队列出队的伪算法(1)先保存出队的值;(2)front=(front+1)%maxsize ,其中maxsize代表数组的长度;程序代码:[cpp]view plaincopy1.bool Dequeue(PQUEUE Q, int *val)2.{3.if(EmptyQueue(Q))4. {5.return false;6. }7.else8. {9. *val=Q->pBase[Q->front];10. Q->front=(Q->front+1)%Q->maxsize;11.return true;12. }13.}5.如何判断循环队列是否为空if(front==rear)队列空;else队列不空;[cpp]view plaincopy1.bool EmptyQueue(PQUEUE Q)2.{3.if(Q->front==Q->rear) //判断是否为空4.return true;5.else6.return false;7.}6.如何判断循环队列是否为满这个问题比较复杂,假设数组的存数空间为7,此时已经存放1,a,5,7,22,90六个元素了,如果在往数组中添加一个元素,则rear=front;此时,队列满与队列空的判断条件front=rear相同,这样的话我们就不能判断队列到底是空还是满了;解决这个问题有两个办法:一是增加一个参数,用来记录数组中当前元素的个数;第二个办法是,少用一个存储空间,也就是数组的最后一个存数空间不用,当(rear+1)%maxsiz=front时,队列满;[cpp]view plaincopy1.bool FullQueue(PQUEUE Q)2.{3.if(Q->front==(Q->rear+1)%Q->maxsize) //判断循环链表是否满,留一个预留空间不用4.return true;5.else6.return false;7.}附录:queue.h文件代码:[cpp]view plaincopy1.#ifndef __QUEUE_H_2.#define __QUEUE_H_3.typedef struct queue4.{5.int *pBase;6.int front; //指向队列第一个元素7.int rear; //指向队列最后一个元素的下一个元素8.int maxsize; //循环队列的最大存储空间9.}QUEUE,*PQUEUE;10.11.void CreateQueue(PQUEUE Q,int maxsize);12.void TraverseQueue(PQUEUE Q);13.bool FullQueue(PQUEUE Q);14.bool EmptyQueue(PQUEUE Q);15.bool Enqueue(PQUEUE Q, int val);16.bool Dequeue(PQUEUE Q, int *val);17.#endifqueue.c文件代码:[cpp]view plaincopy1.#include<stdio.h>2.#include<stdlib.h>3.#include"malloc.h"4.#include"queue.h"5./***********************************************6.Function: Create a empty stack;7.************************************************/8.void CreateQueue(PQUEUE Q,int maxsize)9.{10. Q->pBase=(int *)malloc(sizeof(int)*maxsize);11.if(NULL==Q->pBase)12. {13. printf("Memory allocation failure");14. exit(-1); //退出程序15. }16. Q->front=0; //初始化参数17. Q->rear=0;18. Q->maxsize=maxsize;19.}20./***********************************************21.Function: Print the stack element;22.************************************************/23.void TraverseQueue(PQUEUE Q)24.{25.int i=Q->front;26. printf("队中的元素是:\n");27.while(i%Q->maxsize!=Q->rear)28. {29. printf("%d ",Q->pBase[i]);30. i++;31. }32. printf("\n");33.}34.bool FullQueue(PQUEUE Q)35.{36.if(Q->front==(Q->rear+1)%Q->maxsize) //判断循环链表是否满,留一个预留空间不用37.return true;38.else39.return false;40.}41.bool EmptyQueue(PQUEUE Q)42.{43.if(Q->front==Q->rear) //判断是否为空44.return true;45.else46.return false;47.}48.bool Enqueue(PQUEUE Q, int val)49.{50.if(FullQueue(Q))51.return false;52.else53. {54. Q->pBase[Q->rear]=val;55. Q->rear=(Q->rear+1)%Q->maxsize;56.return true;57. }58.}59.60.bool Dequeue(PQUEUE Q, int *val)61.{62.if(EmptyQueue(Q))63. {64.return false;65. }66.else67. {68. *val=Q->pBase[Q->front];69. Q->front=(Q->front+1)%Q->maxsize;70.return true;71. }72.}[文档可能无法思考全面,请浏览后下载,另外祝您生活愉快,工作顺利,万事如意!]。

实现循环队列上各种基本运算的算法

实现循环队列上各种基本运算的算法

实现循环队列上各种基本运算的算法循环队列是一种特殊的队列,它的底层实现是通过数组来存储数据,并通过两个指针(front指针和rear指针)来确定队头和队尾的位置。

循环队列的特点是:队满和队空的判定条件相同,即队头指针与队尾指针相邻时,队列为满;队头指针与队尾指针相等时,队列为空。

循环队列的基本运算包括:初始化队列、入队操作、出队操作、获取队头元素、获取队列长度、判定队空和队满。

1. 初始化队列初始化循环队列需要创建一个指定大小的数组,并将前后指针(front和rear)都指向数组的起始位置。

代码如下:```pythondef init_queue(size):return [None] * size, 0, 0```2. 入队操作入队操作主要涉及向队尾添加元素,并同时更新rear指针。

如果队列已满,则无法添加元素。

代码如下:```pythondef enqueue(queue, item):size, front, rear = queueif (rear + 1) % size == front:print("Queue is full")queue[rear] = itemqueue[2] = (rear + 1) % size```3. 出队操作出队操作主要涉及从队头移除元素,并同时更新front指针。

如果队列为空,则无法进行出队操作。

代码如下:```pythondef dequeue(queue):size, front, rear = queueif front == rear:print("Queue is empty")else:item = queue[front]queue[front] = Nonequeue[1] = (front + 1) % sizereturn item```4. 获取队头元素获取队头元素操作是指返回队列中第一个元素的值,但不移除元素。

循环队列的基本操作

循环队列的基本操作

循环队列的基本操作循环队列(Circular Queue)是一种用数组实现的队列数据结构,具有固定大小并按照循环方式使用空间的特点。

循环队列有着基本的操作:入队、出队、判空、判满、获取队头元素、获取队列长度。

1. 入队(Enqueue)操作:入队操作是将元素添加到队列的末尾。

当队列为空时,设置队头和队尾均为0;当队列不满时,将元素插入到队尾,并将队尾指针向后移动一位;当队列满时,不再插入新元素。

算法步骤:1.如果队列已满,返回错误或抛出异常。

2.将元素放入队尾位置。

3.队尾指针向后移动一位(考虑取模操作,以实现循环)。

4.返回成功入队的标志。

2. 出队(Dequeue)操作:出队操作是将队头元素移除,并返回该元素。

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

算法步骤:1.如果队列为空,返回错误或抛出异常。

2.记录队头元素的值。

3.队头指针向后移动一位(考虑取模操作,以实现循环)。

4.返回记录的队头元素值。

3.判空操作:判空操作用于判断队列是否为空。

当队头和队尾指针相等且队列中无元素时,队列为空。

算法步骤:1.如果队头和队尾指针相等,返回队列为空的标志。

2.否则,返回队列不为空的标志。

4.判满操作:判满操作用于判断队列是否已满。

当队头和队尾指针相等且队列中有元素时,队列已满。

算法步骤:1.如果队头和队尾指针相等且队列中有元素,返回队列已满的标志。

2.否则,返回队列未满的标志。

5. 获取队头元素(Get Front):获取队头元素操作用于返回队列中的队头元素,但不移除该元素。

当队列为空时,无法获取队头元素。

算法步骤:1.如果队列为空,返回错误或抛出异常。

2.返回队头指针位置元素的值。

6. 获取队列长度(Get Size):获取队列长度操作用于返回队列中元素的个数。

队列的长度等于队尾指针减去队头指针。

算法步骤:1.返回队尾指针减去队头指针的绝对值。

循环队列的基本操作就是以上六个,它们用于实现循环队列的基本功能。

循环队列的优点是可以更好地利用空间,而不会造成空间浪费。

c语言数据结构(环形队列)

c语言数据结构(环形队列)

c语言数据结构(环形队列)环形队列是一种经典的数据结构,它在很多场景中发挥着重要的作用。

本文将介绍C语言中的环形队列的原理、实现及其在实际应用中的一些注意事项。

1.环形队列的原理环形队列是一种特殊的队列,它的底层数据结构是一个数组。

与普通队列不同的是,当队列的尾指针指向数组的最后一个位置时,如果还需要继续插入元素,尾指针则跳转到数组的第一个位置。

这样就形成了一个环形的结构,可以循环利用数组中的空间。

2.环形队列的实现环形队列的实现主要涉及到以下几个要素:-队列的初始化:需要给队列分配一块固定大小的内存空间,并初始化队列的头指针和尾指针。

-入队操作:将元素插入到队列的尾部,并更新尾指针的位置。

-出队操作:将队列头部的元素移除,并更新头指针的位置。

-判空操作:判断队列是否为空,即头指针和尾指针是否相等。

-判满操作:判断队列是否已满,即尾指针的下一个位置是否等于头指针。

以下是一个基于数组的环形队列的简单实现:```c#define MAX_SIZE 100typedef structint data[MAX_SIZE];int front; // 头指针int rear; // 尾指针} CircularQueue;void initQueue(CircularQueue *queue)queue->front = 0;queue->rear = 0;void enqueue(CircularQueue *queue, int element)if ((queue->rear + 1) % MAX_SIZE == queue->front) printf("Queue is full.\n");return;}queue->data[queue->rear] = element;queue->rear = (queue->rear + 1) % MAX_SIZE;int dequeue(CircularQueue *queue)if (queue->front == queue->rear)printf("Queue is empty.\n");return -1;}int element = queue->data[queue->front];queue->front = (queue->front + 1) % MAX_SIZE;return element;int isEmpty(CircularQueue *queue)return queue->front == queue->rear;int isFull(CircularQueue *queue)return (queue->rear + 1) % MAX_SIZE == queue->front;```3.环形队列的应用注意事项在使用环形队列时,需要注意以下几点:-队列的大小是有限制的,如果插入元素的速度过快,可能会导致队列溢出。

循环队列设计实验报告

循环队列设计实验报告

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

2. 掌握循环队列的基本操作,包括初始化、入队、出队、判断队列满和空等。

3. 通过实验加深对队列数据结构在实际应用中的理解。

二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 2019三、实验内容循环队列是一种利用固定大小的数组实现队列的数据结构。

当队列满时,队列的最后一个元素之后的元素会覆盖队列的第一个元素,形成一个循环。

本实验主要实现以下功能:1. 初始化循环队列。

2. 入队操作(Enqueue)。

3. 出队操作(Dequeue)。

4. 判断队列满和空。

四、实验步骤1. 定义循环队列的结构体,包括队列的最大容量、队列的数组、头指针和尾指针。

```cppstruct LoopQueue {int maxSize; // 队列的最大容量int data; // 队列的数组int front; // 队列的头指针int rear; // 队列的尾指针};```2. 实现初始化函数,初始化队列的最大容量、头指针和尾指针。

```cppvoid initLoopQueue(LoopQueue &queue, int maxSize) {queue.maxSize = maxSize;queue.data = new int[maxSize];queue.front = 0;queue.rear = 0;}```3. 实现入队操作,当队列不满时,将元素添加到队列的尾指针位置,并更新尾指针。

```cppbool enqueue(LoopQueue &queue, int value) {if ((queue.rear + 1) % queue.maxSize == queue.front) {return false; // 队列满}queue.data[queue.rear] = value;queue.rear = (queue.rear + 1) % queue.maxSize;return true;}```4. 实现出队操作,当队列不为空时,返回队列的头指针位置的元素,并更新头指针。

数据结构 循环队列应用

数据结构 循环队列应用

数据结构循环队列应用循环队列是一种常见的数据结构,它在很多实际应用中都有广泛的应用。

本文将介绍循环队列的概念、特点以及其在实际应用中的一些例子。

一、循环队列的概念循环队列是一种用数组实现的队列,它的特点是可以循环利用数组空间。

在循环队列中,队列的尾部指针可以追赶上队列的头部指针,形成一个循环。

这样可以充分利用数组的空间,提高队列的效率。

二、循环队列的特点1. 循环队列的底层数据结构是数组,因此可以随机访问队列中的元素,时间复杂度为O(1)。

2. 循环队列使用头部指针和尾部指针来标记队列的起始和结束位置,插入和删除操作只需移动指针,时间复杂度为O(1)。

3. 循环队列可以循环利用数组的空间,当队列满时,可以将尾部指针指向数组的起始位置,实现循环利用,提高空间利用率。

4. 循环队列的长度是固定的,一旦确定大小就不能改变,因此需要预先分配好足够的空间。

三、循环队列的应用1. 缓冲区循环队列常用于缓冲区的设计。

在计算机系统中,往往需要将数据从一个模块传递到另一个模块,而两个模块的处理速度可能不一致。

此时可以使用循环队列作为缓冲区,将数据存储在队列中,待另一个模块处理完毕再从队列中取出。

2. 线程池线程池是一种常见的多线程编程模型,循环队列可以用于线程池的任务队列。

线程池中的线程从任务队列中取出任务进行处理,当任务队列为空时,线程可以等待新的任务到来。

循环队列可以高效地处理任务的入队和出队操作,提高线程池的性能。

3. 操作系统调度操作系统中的进程调度也可以使用循环队列来实现。

在多道程序环境下,操作系统需要为每个进程分配CPU时间。

循环队列可以用于存储就绪队列中的进程,每次调度从队列中取出一个进程分配CPU 时间。

4. 高性能网络通信在高性能网络通信中,往往需要使用循环队列来实现消息队列。

消息队列用于存储待发送或待接收的消息,循环队列可以高效地处理消息的入队和出队操作,提高网络通信的性能。

四、总结循环队列是一种常见的数据结构,它具有随机访问、高效的入队和出队操作的特点。

实现循环队列的入队,出队等基本操作

实现循环队列的入队,出队等基本操作

循环队列的基本操作一、实验目的1. 理解并掌握队列的逻辑结构和顺序存储结构,了解循环队列的特点;2. 掌握循环队列中基本操作的相关算法;3. 编程实现相关算法;4. 学会利用循环队列解决实际问题。

二、实验条件Visual C++。

三、实验原理及相关知识1. 循环队列存储结构描述#define MAXSIZE 100 //最大队列长度typedef struct{QElemType *base; //存储空间基址int front; //头指针int rear; //尾指针}SqQueue;2. 基本操作的算法描述设下标为index,队列长度为m,则下一个下标的累进循环计算公式为:index_next = ( index+1 ) % m。

实验中涉及的三个关键操作时循环队列中求队列长度、入队和出队操作。

(1) 求长度所谓求队列长度,即技术队列中元素的个数。

算法思想:根据循环队列的结构特征,可以用公式(Q.rear-Q.front+ MAXSIZE)%MAXSIZE 直接计算出队列的长度。

算法描述Status QueueLength(SqQueue Q){return ( ( Q.rear-Q.front+ MAXSIZE) %MAXSIZE);}//QueueLength(2) 入队入队运算实际上相当于顺序表中的插入运算,所不同的是这里只能在队尾插入元素。

算法思想:①将元素e插入循环队列中队尾元素的下一个存储空间②修改队尾指针,根据循环累计公式计算出其新位置算法描述Status EnQueue(SqQueue &Q, QElemType e){if ( ( Q.rear + 1 ) % MAXSIZE == Q.front )return ERROR; //队列满Q.base[Q.rear] = e;Q.rear = ( Q.rear + 1 ) % MAXSIZE;return OK;}// EnQueue(3) 出队出队运算实际上相当于顺序表中的删除运算,所不同的是这里只能在队头删除元素。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

循环队列的学习解析以及C语言实现
循环队列的学习解析以及C语言实现首先我们先来了解一下队列的概念:队列是一种先进先出的线性表只能在表头删除在表尾插入,操作系统的作业队列就是队列的一个很好的应用。

也有可以在两端均可进行插入和删除操作的队列,称为双端队列,但其用处并没有一般队列广泛。

ADT Queue {
数据对象:
D={ai | ai∈ElemSet, i=1,2,...,n, n≥0}
数据关系:
R1={ <a i-1,ai > | ai-1, ai ∈D, i=2,...,n}
(约定其中a1端为队列头,an端为队列尾)
基本操作:
InitQueue(&Q) 初始化队列
DestroyQueue(&Q) 销毁队列
QueueEmpty(Q) 判断队列空否
QueueLength(Q) 求取队长
GetHead(Q, &e) 取对头元素
ClearQueue(&Q) 清空对列
EnQueue(&Q, e) 入队一个元素
DeQueue(&Q, &e) 出队一个元素
QueueTravers(Q, visit())访问队列
} ADT Queue
队列也有两种存储结构,分别是顺序存储和链式存储。

队列的顺序结构和顺序表以及顺序栈的存储结构类似,他们所运用的都是一组地址连续的存储。

其中队列需要附设两个整形变量front和rear分别指示队列头元素和队列的尾元素的位置。

c
b
(1)空队列 (2)a,b,,c 相继入队
由于顺序队列所分配的空间有限,根据队列入队和出队的特点可能发生“假溢出”现象,即队尾元素无法在前移。

解决的办法就是将队列抽象成为环状,即循环队列。

循环队列
以下是循环队列的几种主要的操作以及C 语言实现: a 5 4 3 2 1 0 Q.r → Q.→ Q.→ Q.→
{ 队空条件:Q.front=Q.rear
队满条件:(Q.rear+1)%MAXQSIZE
/********循环队列的数据结构***********/
#define MAXQSIZE 10
typedef struct
{
QElemType *base;
int front;
int rear;
} SqQueue;
1、循环队列的初始化
Status InitQueue(SqQueue &Q)
{ //构建一个空队列 Q.base = new QElemType[MAXQSIZE];
if( Q.base = NULL) //存储分配失败 exit(OVERFLOW) ;
Q.front = Q.rear = 0; //头尾指针置为零,队列为空
return OK;
}
2、求循环队列长度
int QueueLength(Squeue Q)
{
return (Q.rear - Q.front + MAXQSIZE )%MAXQSIZE; }
3、入队
Status EnQueue (SqQueue &Q , QElemType e)
{
if((Q.rear+1)%MAXQSIZe == Q.front)
return ERROW;
Q.base[Q.rear] = e;
Q.rear = (Q.rear + 1) %MAXQSIZE;
return OK:
}
4、出队
Status DeQueue(SqQueue &Q,QElemType &e) {
if(Q.front==Q.rear)
return ERROW;
e=Q.base[Q.front];
Q.front = (Q.front + 1 )%MAXQSIZE;
return OK;
}
5、取队头元素
SElemType GetHead(SqQueue Q) {
if(Q.front ! = Q.rear)
return Q.base[Q.front];
}
队列的链式表示和实现。

/********队列的链式存储结构********/
typedef struct QNonde
{
QElemType date;
struct QNode *next;
} QNode,QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
1、初始化
Status InitQueue(LinkQueue &Q) {
Q.front = Q.rear = new QNode;
Q>front -> next = NULL;
return OK;
}
2、入队
Status EnQueue(LinkQueue &Q,QElemType e) {
p = new QNode ;
p -> date = e;
p -> next = NULL;
Q.rear -> next = p;
Q.rear = p;
return OK;
}
3、出队
Status Dequeue(LinkQueue &Q,QElemType &e) {
if(Q.front == Q.rear)
return ERROR;
e = p -> date;
Q.front -> next = p -> next;
if(Q.rear == p)
Q.rear = Q.front;
delete p;
return OK;
}
4、取队头元素
SElemType GetHead(LinkQueue Q) {
if(Q.front != Q.rear)
return Q>front->next->date; }。

相关文档
最新文档