队列的基本概念

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

data
a1 a2 a3 a4
(队尾)
(队头)
4
具体算法:
void QueueInitiate(SeqCQueue *Q) /*初始化顺序循环队列Q*/ { Q->rear = 0; /*定义初始队尾指针下标值*/
Q->front = 0; /*定义初始队头指针下标值*/
Q->count = 0; /*定义初始计数器值*/
}
9
3
三、顺序队列
1、顺序队列 采用顺序存储结构的队列。 2、顺序队列的存储结构 它利用一个一维数组来 存储数据元素,另再设立一 个队头指示器和一个队尾指 8 rear 示器分别指向当前队头元素 7 和当前队尾元素。用C语言 6 定义为: 5 typedef struct 4 front 3 { DataType queue[MaxQueueSize]; 2 int rear; 1 int front; 0 }SeqCQueue;
队尾插 入 1、队列定义 只能在表的一端进行插入操作,在表的另一端 进行删除操作的线性表。 2、逻辑结构 与线性表相同,仍为一对一关系。 队头删 除 3、存储结构 顺序队列或链队列,以循环顺序队列更常见。
3.3 队列 一、队列的基本概念
4、运算规则 只能在队首和队尾运算,且访问结点时依照
先进先出(FIFO)的原则。
7
}
3)出队操作 算法说明:删除队头元素,返回其值 e 分 析:
(1) 在删除前应当判断队列是否空? if(Q->count == 0) return 0; (2)删除动作 m = Q->queue[Q->front]; Q->front = (Q->front + 1) % MaxQueueSize; Q->count--;
}
5
2) 入队操作
算法说明:向循环队列的队尾插入一个元素 分 析: (1) 插入前应当先判断队列是否满? if (Q->count>0 && Q->rear==Q->front) return 0;
(2)插入动作 Q->queue[Q->rear] = x; Q->rear = (Q->rear + 1) % MaxQueueSize; Q->count++; return 1;
an )
队尾
在队尾插入元素称为入队;在队首删除元素称为 出队。
当队列中没有数据元素时称为空队列。
2
二、队列抽象数据类型
数据集合:{a0,a1,…,ai ,…,an-1} ai的数据类型为 Dwenku.baidu.comtaType 操作集合:(1)QueueInitiate(Q) (2)QueueNotEmpty(Q) (3)QueueAppend(Q,x) (4)QueueDelete(Q,d) (5)QueueGet(Q,d) 等 初始化队列Q 队列Q非空否 入队列 出队列 取队头数据元素
5、实现方式 关键是掌握入队和出队操作,具体实现依顺
序队或链队的不同而不同。
基本操作:入队或出队,建空队列,判队空或队满等操作。
1
队列 (Queue)是仅在表尾进行插入操作,在表头进 行删除操作的线性表。它是一种先进先出(FIFO) 的线性表。
例如:队列 Q= (a1 , a2 , a3
队首
, ……….,an-1 ,
front指针在元素出队后再加
8
出队操作完整算法
int QueueDelete(SeqCQueue *Q, DataType *d) { if(Q->count == 0) { printf("队列已空无数据元素出队列! \n"); return 0; }
else
{
*d = Q->queue[Q->front]; Q->front = (Q->front + 1) % MaxQueueSize; Q->count--; return 1; }
队列尺寸
6
入队操作完整算法
int QueueAppend(SeqCQueue *Q, DataType x) { if(Q->count > 0 && Q->rear == Q->front)
{
printf("队列已满无法插入! \n");
return 0; }
else { Q->queue[Q->rear] = x; Q->rear = (Q->rear + 1) % MaxQueueSize; Q->count++; return 1; }
相关文档
最新文档