16. C#数据结构与算法 -- 队列

什么是队列,所谓的队列是队列(Queue)是插入操作限定在表的尾部而其它操作限定在表的头部进行的,线性表。把进行插入操作的表尾称为队尾(Rear),把进行其它操作的头部称为队头(Front)。当对列中没有数据元素时称为空对列(Empty
Queue)。队列通常记为:Q= (a1,a2,…,an),Q是英文单词queue的第 1
个字母。a1为队头元素,an为队尾元素。这n个元素是按照a1,a2,…,an的次序依次入队的,出对的次序与入队相同,a1第一个出队,an最后一个出队。所以,对列的操作是按照先进先出(First
In First Out)或后进后出( Last In Last Out)的原则进行的,这就像 排队买票
,买完就做。因此,队列又称为FIFO表或LILO表。队列Q的操作示意图如图所示。具体情况,如图所示:

队列的形式化定义为:队列(Queue)简记为 Q,是一个二元组, Q = (D, R) 其中:D 是数据元素的有限集合; 是数据元素之间关系的有限集合。
在实际生活中有许多类似于队列的例子。比如,排队取钱,先来的先取,后来的排在队尾。

同样,我们以 C#语言的泛型接口来表示队列,接口中的方法成员表示基本操作。为了表示的方便与简洁,把泛型队列接口取名为
IQueue<T>(实际上,在C#中泛型队列类是从 IEnumerable<T>、 ICollection 和 IEnumerable
接口继承而来,没有 IQueue<T>泛型接口) 。队列接口 IQueue<T>源代码的定义如下所示。

public interface IQueue<T> {
int GetLength();
//求队列的长度;初始条件:队列存在; 操作结果:返回队列中数据元素的个数。一切开始,如图所示:

bool IsEmpty(); //判断对列是否为空;初始条件:队列存在; 操作结果:如果队列为空返回 true,否则返回 false。
 一切情况,如图所示:

void Clear(); //清空队列;初始条件:队列存在; 操作结果:使队列为空。

void In(T item); //入队 初始条件:队列存在;操作结果:将值为 item 的新数据元素添加到队尾,队列发生变化.

T Out(); //出队 进行出队的操作 返回头结点  具体情况 如图所示

此算法复杂度是O(1)

T GetFront(); //取对头元素 取头元素 具体情况 如图所示

此算法的复杂度是O(1)

此算法复杂度是O(1)

}

这就是队列是  基本介绍。

参考: http://www.jb51.net/article/31699.htm

时间: 2024-10-09 22:51:13

16. C#数据结构与算法 -- 队列的相关文章

javascript数据结构与算法---队列

队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素反而被优先处理.我们现在可以把队列想象对我们去餐馆吃饭的情景,很多人排队吃饭,排在最前面的人先打饭.新来的人只能在后面排队.直到轮到他们为止. 一:对队列的操作 队列有2种主要的操作,向队尾中插入新元素enqueue()方法和删除队列中的队首的元素的dequeue()方法,另外我们还有一个读取队头的元素,这个方法我们可以叫front()方法.该

数据结构与算法-----队列篇

队列 1.基本特征:先进先出 2.基本操作:从后端(rear)压入(push),从前端(front)弹出(pop) 3.实现要点:初始化空间.从后端指针压入,从前端指针弹出, 循环使用,判空判满 实践1 :使用C++语言实现队列类并进行数据示例演示 #include <iostream> using namespace std; class Queue { public: // 构造函数中分配内存空间 Queue (size_t size) : m_data (new int[size]),

JavaScript数据结构和算法----队列

前言 队列和栈很像,只是用了不同的原则.队列是遵循先进先出(FIFO)原则的一组有序的的项,队列在尾部添加新元素,从顶部移除元素.最新添加的元素必须必须排队在队列的,末尾.可以想象食堂排队买饭的样子. 一.创建队列 1.创建一种数据结构来保存队列里面的数据,这里选择数组 2.声明一些栈的方法 enqueue(element(s)) : 添加一个或一些元素到队列的末尾 dequeue() : 移除队列第一个的元素(就是排队在最前面的),同时返回被移除的元素. front() : 返回队列第一个的元

python数据结构与算法——队列

队列结构可以使用数组来模拟,只需要设定头和尾的两个标记 参考自<啊哈> 1 # 按书中的代码会出现索引越界的问题(书中申请了超量的空间) 2 # 尝试令tai初始为len(q)-1则不会出错但少了最后一位 3 # 通过异常处理,捕获出界异常则直接跳出循环 4 def queue_demo1(q): 5 newq = [] 6 head = 0 7 tail = len(q) # 记录队列最后一位 8 9 while head < tail : 10 newq.append(q[head]

[数据结构与算法] : 队列

头文件 1 typedef int ElementType; 2 3 #ifndef _QUEUE_H_ 4 #define _QUEUE_H_ 5 6 struct QueueRecord; 7 typedef struct QueueRecord *Queue; 8 9 int IsEmpty(Queue Q); 10 int IsFull(Queue Q); 11 Queue CreateQueue(int MaxElements); 12 void DisposeQueue(Queue

js数据结构与算法——队列

<script> //创建一个队列 function Queue(){ let items = []; //向队尾添加一个新的项 this.enqueue = function(element){ items.push(element) } //移除队列第一个项,并返回被移除的元素 dequeue this.dequeue = function(){ return items.shift(); } this.front = function(){ return items[0]; } this

【Java数据结构学习笔记之二】Java数据结构与算法之队列(Queue)实现

  本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型   队列同样是一种特殊的线性表,其插入和删除的操作分别在表的两端进行,队列的特点就是先进先出(First In First Out).我们把向队列中插入元素的过程称为入队(Enqueue),删除元素的过程称为出队(Dequeue)并把允许入队的一端称为队尾,允许出的的一端称为队头,没有任何元素的队列

数据结构与算法系列研究二——栈和队列

栈和队列的相关问题分析 一.栈和队列定义 栈和队列是两种重要的数据结构.从结构特性角度看,栈和队列也是线性表,其特殊性在于它们的基本操作是线性表的子集,是操作受限的线性表,可称为限定性的数据结构:从数据类型角度看,其操作规则与线性表大不相同,是完全不同于线性表的抽象数据类型.                    图1 栈的结构                                                 图2 队列的结构   1.1.栈是限定在表的一端进行插入和删除操作的线性

Java数据结构和算法之栈与队列

二.栈与队列 1.栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶(Top),另一端称为栈底(Bottom). (2)当表中没有元素时称为空栈. (3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表. 栈的修改是按后进先出的原则进行. 每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除. 图1 [示例]元素是以a1,a2,-,a