队列c语言,数组实现队列c语言

本文目录一览:

二级c语言,队列、循环队列是什么?

队列是一种特殊的线性表,循环队列是将向量空间想象为一个首尾相接的圆环。

1、队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。

2、循环队列是将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列。 在顺序队列中,当队尾指针已经到数组的上界,不能再有入队操作,但其实数组中还有空位置,这就叫做“假溢出”,解决假溢出的途径—-采用循环队列。

扩展资料

判断队列满的情况:

1、count来计数;通常使用count

Count等于队列的MAXSIZE

2、Flag标志 int

入队列 flag=1 出队列flag=0

Front=rearflag==0

3、把一个存储单元空出来,不存放数据

Rear+1==front

注意事项:(不要) 顺序结构,SeqQueue myQueue;

参考资料来源:百度百科—循环队列

用C语言编写队列程序

#includestdio.h

#includestdlib.h

#includemalloc.h

#define TRUE 1

#define FALSE 0

#define NULL 0

#define OK 1

#define OVERFLOW 0

#define ERROR 0

typedef int QElemType;

typedef int Status;

typedef struct QNode

{

QElemType data;

QNode *next;

}*QueuePtr;

struct LinkQueue

{

QueuePtr front,rear;//队头,队尾指针

};

//函数列表

void InitQueue(LinkQueue Q)

{//初始化一个队列

Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

if(!Q.front)//生成头结点失败

exit(OVERFLOW);

Q.front-next=NULL;

}

void DestoryQueue(LinkQueue Q)

{ //销毁队列

while(Q.front)

{

Q.rear=Q.front-next;//Q.rear指向Q.front的下一个结点

free(Q.front);//释放Q.front所指结点

Q.front=Q.rear;//Q.front指向Q.front的下一个结点

}

}

void ClearQueue(LinkQueue Q)

{ //将队列清为空

DestoryQueue(Q);//销毁队列

InitQueue(Q);//重新构造队列

}

Status QueueEmpty(LinkQueue Q)

{ //判断队列是否为空

if(Q.front-next==NULL)

return TRUE;

else return FALSE;

}

int QueueLength(LinkQueue Q)

{ //求队列的长度

int i=0;//计数器清0

QueuePtr p=Q.front;//p指向结点

while(Q.rear!=p)//p所指向的不是尾结点

{

i++;//计数器加1

p=p-next;

}

return i;

}

Status GetHead(LinkQueue Q,QElemType e)

{ //若队列不空,则用e返回队头元素

QueuePtr p;

if(Q.front==Q.rear) return ERROR;

p=Q.front-next;//p指向队头结点

e=p-data;//将队头元素的值赋给e

return OK;

}

void EnQueue(LinkQueue Q,QElemType e)

{ //插入元素e为队列Q的新的队尾元素

QueuePtr p;

p=(QueuePtr)malloc(sizeof(QNode));

//动态生成新结点

if(!p)

exit(OVERFLOW);

p-data=e;//将e的值赋给新结点

p-next=NULL;//新结点的指针为空

Q.rear-next=p;//原队尾结点的指针域为指向新结点

Q.rear=p;//尾指针指向新结点

}

Status DeQueue(LinkQueue Q,QElemType e)

{ //若队列不为空,删除Q的队头元素,用e返回其值

QueuePtr p;

if(Q.front==Q.rear)//队列为空

return ERROR;

p=Q.front-next;//p指向队头结点

e=p-data;//队头元素赋给e

Q.front-next=p-next;//头结点指向下一个结点

if(Q.rear==p)//如果删除的队尾结点

Q.rear=Q.front;//修改队尾指针指向头结点

free(p);

return OK;

}

void QueueTraverse(LinkQueue Q,void(*visit)(QElemType))

{ //对队头到队尾依次对队列中每个元素调用函数visit()

QueuePtr p;

p=Q.front-next;

while(p)

{

visit(p-data);//对p所指元素调用visit()

p=p-next;

}

printf(“\n”);

}

void print(QElemType e)

{

printf(“%2d”,e);

}

void main()

{

int i,k;

QElemType d;

LinkQueue q;

InitQueue(q);//构造一个空栈

for(i=1;i=5;i++)

{

EnQueue(q,i);

}

printf(“栈的元素为:”);

QueueTraverse(q,print);

k=QueueEmpty(q);

printf(“判断栈是否为空,k=%d(1:为空9;0:不为空)\n”,k);

printf(“将队头元素赋给d\n”);

k=GetHead(q,d);

printf(“队头元素为d=%d\n”,d);

printf(“删除队头元素:\n”);

DeQueue(q,d);

k=GetHead(q,d);

printf(“删除后新的队头元素为d=%d\n”,d);

printf(“此时队列的长度为%d\n”,QueueLength(q));

ClearQueue(q);//清空队列

printf(“清空队列后q.front=%u,q.rear=%u,q.front-next=%u\n”,q.front,q.rear,q.front-next);

DestoryQueue(q);

printf(“销毁队列后,q.front=%u,q.rear=%u\n”,q.front,q.rear);

c语言队列操作

pq-rear-next

=

pnew这个代码从队列的尾部增加新节点,

然后pq-rear

=

pnew更新队列尾部指针。队列的数据结构形式就是由一个头front指针,一个尾rear指针来表征,items的设计是用空间换时间,涉及队列大小的操作会非常方便。

队列的特征是先进先出,你给出的链式实现,其实就跟一个链表一样,链表的添加删除如果能理解了,队列只是链表的元素增加/删除

按先进先出特点的一种实现。

但对于队列来说,实现方式不是重点,先进先出的性质才是重点,这在实际应用中很多,比如排队叫号。

C语言中,队列是什么意思,有什么用途

队列是一种特殊的线性表。

队列一种可以实现“先进先出”的存储结构,即“一端入,一端出”,队首(front)出队,队尾(rear)入队,若front指向队首,则rear指向队尾最后一个有效元素的下一个元素;若rear指向队尾,则front指向队首第一个有效元素的下一个元素。

队列特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

扩展资料

循环队列各个参数的含义

1、队列初始化front和rear的值都是零,初始化时队列就是空的。

2、队列非空front代表队列的第一个元素rear代表了最后一个有效元素的下一个元素。

3、队列空front和rear的值相等,但是不一定是零。

参考资料来源:百度百科—队列

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/198181.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-04 07:30
下一篇 2024-12-04 07:30

相关推荐

  • Python导入数组

    本文将为您详细阐述Python导入数组的方法、优势、适用场景等方面,并附上代码示例。 一、numpy库的使用 numpy是Python中一个强大的数学库,其中提供了非常丰富的数学函…

    编程 2025-04-29
  • Python返回数组:一次性搞定多种数据类型

    Python是一种多用途的高级编程语言,具有高效性和易读性的特点,因此被广泛应用于数据科学、机器学习、Web开发、游戏开发等各个领域。其中,Python返回数组也是一项非常强大的功…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • Python去掉数组的中括号

    在Python中,被中括号包裹的数据结构是列表,列表是Python中非常常见的数据类型之一。但是,有些时候我们需要将列表展开成一维的数组,并且去掉中括号。本文将为大家详细介绍如何用…

    编程 2025-04-29
  • Python操作数组

    本文将从多个方面详细介绍如何使用Python操作5个数组成的列表。 一、数组的定义 数组是一种用于存储相同类型数据的数据结构。Python中的数组是通过列表来实现的,列表中可以存放…

    编程 2025-04-29
  • Python中的队列定义

    本篇文章旨在深入阐述Python中队列的定义及其应用,包括队列的定义、队列的类型、队列的操作以及队列的应用。同时,我们也会为您提供Python代码示例。 一、队列的定义 队列是一种…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29
  • RabbitMQ和Yii2的消息队列应用

    本文将探讨RabbitMQ和Yii2之间的消息队列应用。从概念、安装和配置、使用实例等多个方面详细讲解,帮助读者了解和掌握RabbitMQ和Yii2的消息队列应用。 一、Rabbi…

    编程 2025-04-29
  • OpenJudge答案1.6的C语言实现

    本文将从多个方面详细阐述OpenJudge答案1.6在C语言中的实现方法,帮助初学者更好地学习和理解。 一、需求概述 OpenJudge答案1.6的要求是,输入两个整数a和b,输出…

    编程 2025-04-29

发表回复

登录后才能评论