数据结构与算法-队列

作者&投稿:逮婉 (若有异议请与网页底部的电邮联系)
~ 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

队列这个概念非常好理解。你可以把它想象成排队买票,先来的先买,后来的人只能站末尾,不允许插队。先进者先出,这就是典型的“队列”。

我们知道,CPU 资源是有限的,任务的处理速度与线程个数并不是线性正相关。相反,过多的线程反而会导致 CPU 频繁切换,处理性能下降。所以,线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来事先设置的。当我们向固定大小的线程池中请求一个线程时,如果线程池中没有空闲资源了,这个时候线程池如何处理这个请求?是拒绝请求还是排队请求?各种处理策略又是怎么实现的呢?

看完下面队列C语言实现,相信你会多少有些了解

队列只支持两个基本操作:入队 enqueue(),放一个数据到队列尾部;出队 dequeue(),从队列头部取一个元素。
队列跟栈一样,也是一种操作受限的线性表数据结构。

队列跟栈一样,也是一种抽象的数据结构。它具有先进先出的特性,支持在队尾插入元素,在队头删除元素。
跟栈一样,队列可以用数组来实现,也可以用链表来实现。用数组实现的栈叫作顺序栈,用链表实现的栈叫作链式栈。同样,用数组实现的队列叫作顺序队列,用链表实现的队列叫作链式队列。

随着不停地进行入队、出队操作, front 和 rear 都会持续往后移动。当 rear 移动到最右边,即使数组中还有空闲空间,也无法继续往队列中添加数据了。同时也不好判断队满条件,可以使用循环队列来实现

循环队列,顾名思义,它长得像一个环。原本数组是有头有尾的,是一条直线。现在我们把首尾相连,扳成了一个环。

经过推算,可以发现:
队空 Q.rear==Q.front。
队满 (Q.rear+1)%MAXSIZE==Q.front。

注意,当队列满时,图中的 Q.rear 指向的位置实际上是没有存储数据的。所以,循环队列会浪费一个数组的存储空间。

1.初始化空队列

2.清空队列

4.判断队满

5.入队

6.出队

7.获取队列当前元素个数

8.若队列不空,则用e返回Q的队头元素,并返回OK,否则返回ERROR

9.从队头到队尾依次对队列的每个元素数组

10.主函数中验证

输出结果

1.初始化

2.销毁

3.置空

4.判断队列是否为空

5.获取元素个数

6.入队

7.出队

8.获取队头元素

9.遍历队列

验证

输出

数据结构与算法大学没学明白的来
答:数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。 相关术语 在数据结构与算法中,数据、数据对象、数据元素、数据项有一些同学搞不懂其中的关系。通过画一张图来捋一捋: 数据三要素 数据结构三要素...

这学期学数据结构,写链队列算法,遍历函数的时候有个问题,哪位解答下...
答:实验结果:include<stdio.h>#include<stdlib.h> define OK 1 define ERROR 0 define OVERFLOW -2 typedef int Status;typedef int QElemType;typedef struct QNode { QElemType data;QNode *next;}*QueuePtr;struct LinkQueue { QueuePtr front;QueuePtr rear;};//新建一个空队列 void InitQueue(...

数据结构与算法是学什么的
答:数据结构与算法是北京大学于2018年02月26日首次在中国大学MOOC开设的慕课课程,是国家精品在线开放课程。数据结构与算法课程内容包括数据结构与抽象数据类型、算法特性及分类、算法效率与度量、线性结构、顺序表、链表、栈与队列、栈与递归、递归转非递归、字符串的存储结构、字符串运算的算法实现、字符串的...

线性数据结构小百科
答:你是否曾好奇过,电脑是如何快速又准确地存储和处理海量数据的?秘密就在于各种神秘的数据结构,其中线性数据结构是入门款!本文将为你详细介绍线性数据结构的特点和常见类型。关系明确线性数据结构中的数据元素之间有一对一或一对多的关系,就像你在队伍中只能有一个前面的人和多个后面的人。顺序排列线性数据结构中...

栈与队列的区别
答:3、遍历数据速度不同。栈只能从头部取数据,也就最先放入的需要遍历整个栈最后才能取出来,而且在遍历数据的时候还得为数据开辟临时空间,保持数据在遍历前的一致性。队列则不同,它基于地址指针进行遍历,而且可以从头或尾部开始遍历,但不能同时遍历,无需开辟临时空间,因为在遍历的过程中不影像数据结构...

数据结构有什么?
答:Clifford A.Shaffer在《数据结构与算法分析》一书中的定义是:“数据结构是ADT(抽象数据类型Abstract Data Type) 的物理实现。”Robert L.Kruse在《数据结构与程序设计》一书中,将一个数据结构的设计过程分成抽象层、数据结构层和实现层。其中,抽象层是指抽象数据类型层,它讨论数据的逻辑结构及其运算...

数据结构(C语言编写完整可运行程序):设有队列Q、栈S,设计算法利用栈S将...
答:Queue Q;//建立循环队列Q init_q(&Q);Enqueue(&Q, 1);Enqueue(&Q, 2);Enqueue(&Q, 3);printf("逆置后对列中的元素是\n");OutQpushS(&Q, &S);//出对入栈 PopOut(&S, &Q);//出栈并入队 Out(&Q);//对Q出对 return 0;} void init_s(stack *pS){ pS->ptop = NULL;}...

数据结构C语言版 银行业务队列模拟 必须使用栈和队列相关算法 网上的会...
答:include<stdio.h> include<stdlib.h> include define MAX 1000 define error -1 typedef struct node{ int customer[MAX];int rear;int front;}queue;void add(queue *q,int item){ if((q->rear+1)%MAX==q->front){ printf("队列满\n");return;} q->rear=(q->rear+1)%MAX;q->...

计算机专业的考研考什么科目呢?
答:计算机专业考试内容 一、数据结构与算法 线性表、栈和队列、串、数组和广义表、树和二叉树、图、动态存储管理、查找、内部排序、外部排序、文件。二、计算机组成原理 基本概念(计算机组成、性能指标、工作过程等),数据的机器层次表示,指令系统、数值的机器运算、存储系统和结构、中央处理器、总线系统、...

计算机专业的学生如何提高就业能力
答:2、数据结构与算法:链表,队列,堆,二叉树,排序,查找,贪心,回溯等。推荐配合某个具体语言食用,感受数据结构与算法的美。 3、操作系统:进程与线程,乐观锁与悲观锁,缓存一致性,CPU时间片调度,工作中常常用到高并发以及高数据库读写的情况,熟悉操作系统才能开发出更好的方案。 4、计算机网络:工作中会开发各种接口以...