码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构与算法分析 - 4 - 队列

时间:2019-01-27 21:58:53      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:aci   turn   return   子类   c语言   数据   src   链表实现   style   

1.描述:队列也是一种表,遵循先进先出的规则(FIFO)。

队列头称为队头(front),可以取出元素,队列尾称为队尾(rear),允许插入元素。

技术分享图片

 

2.队列的实现

链表实现和数组实现

对于链表实现来说,和栈类似,所有链表的操作都是合法的

主要看队列的数组实现

 

3.队列ADT

技术分享图片

以上是队列支持的接口

 

4. 链表实现

队列可以看作由链表派生出来的子类

技术分享图片

简单地调用链表中的一些接口即可实现队列接口。略。

 

5.数组实现

数组实现队列的本质是创建一系列变量对数组的属性进行跟踪

1 struct QueueRecord
2 {
3     int Capacity;
4     int Front;
5     int Rear;
6     int Size;
7     ElementType *Array;
8 };

检测队列是否为空:

1 int IsEmpty(QueueRecord *Q)
2 {
3     return Q->Size==0;
4 }

构造空队列:

1 void MakeEmpty(QueueRecord *Q)
2 {
3     Q->Size=0;
4     Q->Front=1;
5     Q->Rear=0;
6 }

循环数组:数组是大小固定的,所以,只要不断向列表中添加元素,数组肯定会有满的时候,这时候就需要用到循环数组。

循环数组的Front和Rear,只要到达数组末尾,旋即绕回数组头部。

入队:

 1 static int Succ(int Value,QueueRecord *Q)
 2 {
 3     if(++Value==Q->Capacity)
 4         Value=0;
 5     return Value;
 6 }
 7 
 8 void Enqueue(ElementType X,QueueRecord *Q)
 9 {
10     if(IsFull(Q))
11         Error("Full Queue");
12     else
13     {
14         Q->Size++;
15         Q->Rear=Succ(Q->Rear,Q);
16         Q->Array[Q->Rear]=X;
17     }
18 }

 

6.队列的应用

略。

 

参考资料【1】《数据结构(C++语言版)》  邓俊辉

    【2】《数据结构与算法分析——C语言描述》    Mark Allen Weiss

数据结构与算法分析 - 4 - 队列

标签:aci   turn   return   子类   c语言   数据   src   链表实现   style   

原文地址:https://www.cnblogs.com/CofJus/p/10327556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!