数据结构详细教案——栈和队列
数据结构教案-详细版-第3章栈和队列教案

xxxx学院教案首页xxxx学院教案附页第一学时(栈的定义、常用操作与顺序存储的实现)一、情景导入(1)引出栈的概念由线性表引出栈:栈是线性表的一种,只是在操作上,与线性表有所差别。
如果没有道具,借用课本,粉笔盒或学生自主进行展示。
(2)进入主题,讲解栈的特点与线性表进行类比,栈与基础线性表的差别,在于它的操作受限、取数的方式不如线性表自由。
可以结合图3-1中的图示,引导学生回想存取碗时的具体操作,帮助学生领悟栈的特点。
图3-1 一摞碗二、知识讲解(1)栈的特点结合图3-2中栈的结构图,对栈的操作原则——后进先出,进行讲解。
图3-2 栈的结构图(2)栈的常用操作栈的常用操作如下:•创建栈(初始化栈)•判断栈是否为空•进栈•出栈•获取栈顶元素•获取栈的长度•销毁栈在对栈的原则进行讲解之后,对栈中常用操作进行总结。
(3)栈的顺序存储实现栈是线性表的一种,顺序存储的栈是一种顺序表。
在知识点(2)提到的操作中,进栈和出栈是可以展示出栈特点的特色操作,可以结合图示,对这两种操作的实现进行详细说明;此外,简单叙述栈中其余功能的实现方法。
在讲解完顺序栈中的各种操作之后,结合书中例3-1给出的代码,带领学生掌握栈的实现方法。
第二学时(栈的链式存储实现)一、知识回顾(1)对上节课留的作业进行答疑。
(2)回顾总结上节课的内容,引出本节课主题。
上个学时讲解了栈的定义、栈的特点与栈的顺序实现,本学时来探讨栈的链式存储实现。
二、知识讲解(1)链栈的数据结构定义链栈是一种链表,与顺序栈相同,链栈在操作时也受到限制,遵循“后进先出”的原则。
结合链表的数据结构定义,引导学生完成链栈的数据结构定义。
(2)链栈的实现链栈的存储方式与链表相同,操作原则与顺序栈相同。
从这两点出发进行分析,引导学生找到链栈实现的思路,然后给学生留出一定时间,由学生自主分析巩固链栈操作的实现方法,之后结合学生自主实现链栈时遇到的问题,对链栈进行讲解。
(用栈实现四则运算)三、情境引入通过计算机的算术运算功能,引出本学时的主题:计算机的基本功能大多都是基于对数据的操作,给出一个运算式,计算机能迅速计算出结果,若运算时有误,如运算式“1+3*(2+5”,右边少了一个“)”,编绎器会立刻检查出错误并报告,那么计算机是如何做到的呢?藉由以上问题,引出逆波兰表达式。
《数据结构栈和队列》课件

网络通信
在网络通信中,数据包按 照到达顺序进入队列,等 待处理。
打印任务管理
打印任务按照到达顺序进 入队列,等待打印机的空 闲时间进行处理。
05
栈与队列的比较
结构比较
栈和队列是两种不同的数据结构,它们在结构上有明显的区 别。
课程目标
掌握栈和队列的基本 概念、原理和应用场 景;
能够运用栈和队列解 决实际问题和算法设 计。
理解栈和队列在解决 实际问题中的作用和 优势;
02
数据结构概述
数据结构定义
数据结构定义
数据结构是数据元素之间相互关系和数据元素属性的 抽象表示。
数据结构组成
数据元素、数据元素之间的关系和数据元素的属性。
表达式求值:例如,括号内的运算优先级高于括号外的运算,可以使用栈来保存括 号和运算符,以便正确地计算表达式的值。
深度优先搜索(DFS):在图的遍历中,可以使用栈来保存待访问的节点,实现深 度优先搜索。
04
队列(Queue)
队列的定义
01
队列是一种先进先出(FIFO)的数据结构,用于存储元素的集 合。
07
总结与展望
本章总结
栈和队列是两种常见的数据结构,具有特定的操作规则和特性。
通过学习栈和队列,我们掌握了先进先出(FIFO)和后进先出(LIFO)的 原理,以及如何在程序中实现这些数据结构。
本章还介绍了栈和队列在实际问题中的应用,如括号匹配、表达式求值等 。
数据结构的发展趋势与未来展望
01
随着计算机技术的不断发展,数据结构也在不断演进
02
队列中的元素遵循先入队后出队的规则,即最早进入队列的元
数据结构教案第3章 栈和队列

LinkQueue q;
QElemType eq;
if(newcolor==g[e.row][e.col]) return ERROR; oldcolor= g[e.row][e.col];
DeQueue(q, eq); i=eq.row; j=eq.col; g[i][j]=newcolor; if((i-1>=0)&&(g[i-1][j]=oldcolor) { e.row=i-1; e.col=j; EnQueue(q, e); } if((i+1<=m-1)&&(g[i+1][j]=oldcolor) {e.row=i+1; e.col=j; EnQueue(q, e); } ....................... }\*while return OK; }\*Change_Color
\*栈满
●出栈
Status Pop(SqStack &S, SElemType &e) { if (S.top==S.base) return ERROR; e=*--S.top; rபைடு நூலகம்turn OK; }
●链式存储结构:图3.3(P47) 栈空:S为空指针;栈满:动态分
配,除非溢出。 data next
3.2栈的应用举例 3.2.1 数制转换 十进制N和其它进制数的转换是计算机实现计算 的基本问题,其解决方法很多,其中一个简单算法基 于下列原理: N=(n div d)*d+n mod d ( 其中:div为整除运算,mod为求余运算) 例如 (1348)10=(2504)8,其运算过程如下: n n div 8 n mod 8 1348 168 4 168 21 0 21 2 5 2 0 2
数据结构详细教案——栈和队列资料

数据结构教案第三章栈和队列目录3.1栈的基本概念 (2)3.1.1 栈的抽象数据类型定义 (2)3.1.2 顺序栈 (2)3.1.3 链栈 (4)3.2栈的应用 (4)3.2.1 数制转换:将十进制数N转换成其他d进制数 (4)3.2.2 括号匹配的检验 (4)3.2.3 行输入处理程序 (4)3.2.4 迷宫求解 (5)3.2.5 表达式求值 (5)3.3栈与递归的实现 (6)3.4队列的基本概念 (6)3.4.1 队列的抽象数据类型定义 (6)3.4.2 链队列 (7)3.4.3 循环队列 (8)3.5队列与栈的应用 (8)3.5.1 离散事件模拟 (8)第3章栈和队列3.1 栈的基本概念3.1.1 栈的抽象数据类型定义1、栈的逻辑特征1)限定在表尾进行插入或删除操作的线性表;2)栈顶——表尾端;栈底——表头端3)后进先出的线性表2、抽象数据类型的定义ADT Stack{数据对象:D={a i |a i∈ElemSet, i=1,2,…,n, n≥0}数据关系:R={R1},R1={<a i-1,a i>|a i-1,a i∈D, i=2,3,…,n }基本操作:InitStack( &S )操作结果:构造一个空的栈SDestroyStack( &S )初始条件:栈S已存在操作结果:销毁栈SClearStack( &S )初始条件:栈S已存在操作结果:将栈S重置为空栈StackEmpty( S )初始条件:栈S已存在操作结果:若S为空栈,则返回TRUE,否则返回FALSEStackLength( S )初始条件:栈S已存在操作结果:返回栈S中数据元素的个数GetTop( S, &e )初始条件:栈S已存在且非空操作结果:用e返回S中栈顶元素Push( &S, e )初始条件:栈S已存在操作结果:插入元素e为新的栈顶元素Pop( &S, &e )初始条件:栈S已存在且非空操作结果:删除S的栈顶元素,并用e返回其值StackTraverse( S, visit( ) )初始条件:栈S已存在且非空操作结果:从栈底到栈顶依次对S的每个数据元素调用函数visit( )。
数据结构3_栈和队列

3.2 栈的应用 递归问题 栈的应用:递归问题
五,栈应用子五:迷宫求解(P50) 六,栈应用之六:递归问题的非递归算法 递归(本章下一节) 第六章中二叉树遍历的非递归算法
★3.3 栈与递归
递归问题举例:阶乘函数,数列递推函数,汉 诺塔问题 递归函数:直接或间接调用自己的函数.
本质:根据小规模结论探讨大规模问题的解. 注意:递归函数一定要有退出条件,其时间复杂度, 空间复杂度的计算方法也很特殊(参见第一章).
获取栈顶元素
Status GetTop(SqStack S, ElemType &e) //获 得栈顶元素 { if(S.top==S.base) return ERROR; //栈空 e=*(S.top-1); //注意不是S.top-return OK; } //GetTop
3.1.4链栈:栈的链式存储及其实现
Hale Waihona Puke 除Status Pop(SqStack &S, ElemType &e) { if(S.top==S.base) return ERROR; //一定要 先判断栈是否为空栈 e=*(--S.top); //先--S.top,使其指向栈顶, 然后再e=*S.top return OK; }//Pop
3.2 栈的应用 栈的应用:表达式求值
三,栈的应用之三:括号匹配(P49) 四,栈应用之四:表达式求值(P52)
高级语言(如C++)允许程序中含表达式,编译器应 能分析表达式并求出结果.如:a=1+2*(3-4/5); 表达式的要素:运算符,操作数,优先级,界限符 算法基本思想: 1.算法需要两个栈:操作数栈和运算符栈. 2.首先置操作数栈为空栈,表达式起始符#为运算符 栈的栈底元素; 3.依次读入表达式中每个字符,若是操作数则进操作 数栈;若是运算符,则和运算符栈的栈顶运算符比 较优先权并作相应操作,直至整个表达式求值完毕
数据结构栈和队列教案

= m0*m2 = 2 ✓ 出栈序列中1在第2位。1前有2后有3,
出栈序列为 {2, 1, 3}。= m1*m1 = 1 ✓ 出栈序列中1在第3位。前面2个元素有
m2 = 2个出栈序列:{2, 3, 1}, {3, 2, 1}。 = m2*m0 = 2
✓ n = 4,m4 = 14: = m0*m3+m1*m2+m2*m1+m3*m0
//出栈
virtual bool getTop(E& x) = 0; //取栈顶
virtual bool IsEmpty() = 0;
//判栈空
virtual bool IsFull() = 0;
//判栈满
};
4
栈的数组存储表示 — 顺序栈
01 2 3 4 5 6 7 8 9 elements
maxSize-1
E *newArray = new E[2*maxSize];
//创建更大的存储数组
for (int i = 0; i <= top; i++)
newArray[i] = elements[i];
maxSize += maxSize;
delete [ ]elements;
elements = newArray;
双栈共享一个栈空间
0
maxSize-1
V
b[0]
t[0] t[1]
b[1]
两个栈共享一个数组空间V[maxSize]
设立栈顶指针数组 t[2] 和栈底指针数组 b[2]
t[i]和b[i]分别指示第 i 个栈的栈顶与栈底
初始 t[0] = b[0] = -1, t[1] = b[1] = maxSize
《栈和队列》课件

栈与队列的区别
数据存储方式
栈是后进先出(Last In First Out, LIFO)的数据结构,新元素总是被添加到栈顶,移除 元素时也是从栈顶开始。而队列是先进先出(First In First Out, FIFO)的数据结构,新 元素被添加到队列的尾部,移除元素时从队列的头部开始。
操作方式
栈的主要操作有push(添加元素)和pop(移除元素),而队列的主要操作有enqueue (添加元素)和dequeue(移除元素)。
《栈和队列》ppt课件
目录
CONTENTS
• 栈的定义与特性 • 队列的定义与特性 • 栈与队列的区别与联系 • 栈和队列的实现方式 • 栈和队列的算法实现 • 总结与思考
01 栈的定义与特性
CHAPTER
栈的定义
栈是一种特殊的线性 数据结构,遵循后进 先出(LIFO)原则。
栈中的元素按照后进 先出的顺序排列,最 新加入的元素总是位 于栈顶。
02
如何实现一个队列,并 实现其基本操作( enqueue、dequeue、 front)?
03
栈和队列在应用上有哪 些区别?请举例说明。
04
请设计一个算法,使用 栈实现括号匹配的功能 ,并给出测试用例。
谢谢
THANKS
。
队列的应用场景
任务调度
在任务调度中,可以将任 务按照优先级放入队列中 ,按照先进先出的原则进 行调度。
网络通信
在网络通信中,可以将数 据包放入队列中,按照先 进先出的原则进行发送和 接收。
事件处理
在事件处理中,可以将事 件放入队列中,按照先进 先出的原则进行处理。
03 栈与队列的区别与联系
CHAPTER
应用场景
栈和队列教案

栈和队列教案(总13页) --本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--教案课程名称:数据结构(C语言版)授课班级:技校二年级学生授课学时:1学时授课章节:第三章栈和队列课型:理论课任课教师:***图2 栈的示意图从图2中可以看出第一个进栈的a1为栈底元素,最后一个进栈的an为栈顶元素,进栈和出栈也是同一个方向。
这也是最基本的栈的示意图。
需要同学们熟知。
其实,要解决这个出站问题就离不开我们今天将要学习的进栈、出栈技术,这节课我们将从如下三个方面来掌握它:栈的定义、栈的表示和实现、栈的应用与练习。
其中栈的表示与实现是本节的重点。
一、抽象数据类型栈的定义(6分钟)点。
二、介绍栈的定义类型(8分钟)ADT Stack{数据对象:D={ a i | a i ∈ElemSet, i=1,2,...,n, n≥0 }数据关系:R1={ <a i-1, a i >| a i-1, a i∈D, i=2,...,n }约定a n端为栈顶,a1 端为栈底。
基本操作:InitStack(&S)操作结果:构造一个空栈 S。
DestroyStack(&S)初始条件:栈 S 已存在。
操作结果:栈 S 被销毁。
StackEmpty(S)初始条件:栈 S 已存在。
操作结果:若栈 S 为空栈,则返回TRUE,否则 FALE。
GetTop(S, &e)初始条件:栈 S 已存在且非空。
操作结果:用 e 返回 S 的栈顶元素。
StackLength(S)初始条件:栈 S 已存在。
分钟)操作结果:返回 S 的元素个数,即栈的长度。
ClearStack(&S)初始条件:栈 S 已存在。
操作结果:将 S 清为空栈。
Push(&S, e)初始条件:栈 S 已存在。
操作结果:插入元素 e 为新的栈顶元素。
Pop(&S, &e)初始条件:栈 S 已存在且非空。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构教案第三章栈和队列目录3.1栈的基本概念 (2)3.1.1 栈的抽象数据类型定义 (2)3.1.2 顺序栈 (2)3.1.3 链栈 (4)3.2栈的应用 (4)3.2.1 数制转换:将十进制数N转换成其他d进制数 (4)3.2.2 括号匹配的检验 (4)3.2.3 行输入处理程序 (4)3.2.4 迷宫求解 (5)3.2.5 表达式求值 (5)3.3栈与递归的实现 (6)3.4队列的基本概念 (6)3.4.1 队列的抽象数据类型定义 (6)3.4.2 链队列 (7)3.4.3 循环队列 (8)3.5队列与栈的应用 (8)3.5.1 离散事件模拟 (8)第3章栈和队列3.1 栈的基本概念3.1.1 栈的抽象数据类型定义1、栈的逻辑特征1)限定在表尾进行插入或删除操作的线性表;2)栈顶——表尾端;栈底——表头端3)后进先出的线性表2、抽象数据类型的定义ADT Stack{数据对象:D={a i |a i∈ElemSet, i=1,2,…,n, n≥0}数据关系:R={R1},R1={<a i-1,a i>|a i-1,a i∈D, i=2,3,…,n }基本操作:InitStack( &S )操作结果:构造一个空的栈SDestroyStack( &S )初始条件:栈S已存在操作结果:销毁栈SClearStack( &S )初始条件:栈S已存在操作结果:将栈S重置为空栈StackEmpty( S )初始条件:栈S已存在操作结果:若S为空栈,则返回TRUE,否则返回FALSEStackLength( S )初始条件:栈S已存在操作结果:返回栈S中数据元素的个数GetTop( S, &e )初始条件:栈S已存在且非空操作结果:用e返回S中栈顶元素Push( &S, e )初始条件:栈S已存在操作结果:插入元素e为新的栈顶元素Pop( &S, &e )初始条件:栈S已存在且非空操作结果:删除S的栈顶元素,并用e返回其值StackTraverse( S, visit( ) )初始条件:栈S已存在且非空操作结果:从栈底到栈顶依次对S的每个数据元素调用函数visit( )。
一旦visit( )失败,则操作失败}ADT Stack思考:栈的取元素、插入、删除操作与线性表的相应操作有何区别,为什么?3.1.2 顺序栈1、增量式顺序栈的定义#define STACK_INIT_SIZE 100 /* 存储空间的初始分配量 */#define STACKINCREMENT 10 /* 存储空间的分配增量*/typedef struct{ElemType *base; /* 栈底指针*/ElemType *top; /* 栈顶指针(栈顶元素的下一个位置) */int stacksize; /* 当前分配的存储容量*/ }SqStack;1)和顺序表一样采用增量式的空间分配;2)操作和栈顶相关:插入操作(入栈):将待插元素插入到栈顶元素的下一个位置;删除操作(出栈):删除栈顶元素;取元素操作:取栈顶元素的值。
各操作的操作位置与栈顶元素的位置或其下一个位置相关,希望在O(1)时间内能获取操作位置,故可设置专门的栈顶指针top。
3)约定:top指向栈顶元素的下一个位置(便于表示空栈)。
4)栈顶的初始化:S.top = S.base(在上述3)约定下的空栈形式),5)栈空:S.base == S.top,栈满:S.top - S.base >= S.stacksiz e6)入栈:*S.top ++ = e,出栈:e = *--S.top注意:4), 5), 6)步受3)制约。
约定不同,相应的判定和处理也不一样。
如假设top就指向栈顶元素,此时4),5),6)如何?2、取栈顶元素GetTop_Sq1)算法设计参数:顺序栈S、取得的栈顶元素&e分析:由于top指向栈顶元素的下一个位置,因此实际的栈顶元素的位置应是top -1;栈非空时,此操作有效。
算法1Status GetTop_Sq(SqStack S, ElemType &e){/* 判断栈是否为空*/if ( S.base == S.top) return ERROR;e = *( S.top -1);return OK;}3、入栈操作Push_Sq1)算法设计参数:顺序栈&S、插入元素e分析:插入位置为栈顶元素的下一个,无须判断位置的合法性;上溢即栈满的条件需要判断,由于是增量式分配,故栈满时需要重新申请空间;算法2Status Push_Sq( SqStack &S, ElemType e ){/* 判断栈是否为满*/if ( S.top – S.base >= S.stacksize ){/* 栈满,追加空间*/S.base = ( ElemType * ) realloc( S.base,( S.stacksize + STACKINCREMENT ) * sizeof(ElemType) );if ( S.base == NULL ) exit(OVERFLOW);S.top = S.base + S.stacksize;S.stacksize += STACKINCREMENT;}*S.top++ = e;return OK;}2)算法分析——时间T(n) = O(1)4、出栈操作Pop_Sq1)算法设计参数:顺序栈&S、删除的栈顶元素&e分析:在栈非空时,删除栈顶元素算法3Status Pop_Sq( SqStack &S, ElemType &e){/* 判断栈是否为空*/if (S.base == S.top) return ERROR;e = *( --S.top); /* 注意与GetTop( )的区别*/return OK;}2)算法分析——时间T(n) = O(1)3.1.3 链栈与链表类似,只是链表的头指针即为栈顶指针。
因其操作均在栈顶进行,故可以不引入头结点。
思考:在链栈下的入栈、出栈以及取栈顶元素的操作的算法如何写?3.2 栈的应用3.2.1 数制转换:将十进制数N转换成其他d进制数算法思想:N = ( N div d )×d + N mod d1)将N%d的结果保存,2)N=N/d,3)若N==0结束,否则继续1)。
保存的余数从先到后依次表示转换后的d 进制数的低位到高位,而输出是由高位到低位的,因此必须定义先进后出的线性表——栈来保存;当全部的余数求出后,通过逐个出栈输出d进制数。
3.2.2 括号匹配的检验算法思想:从左至右扫描表达式,遇左括号入栈,遇右括号与栈顶元素比较:若左右括号匹配,则继续扫描;否则说明不匹配,结束。
在上述操作中,若栈为空,或扫描结束后栈不为空,均说明不匹配。
3.2.3 行输入处理程序处理规则:遇‘#’退一格;遇‘@’退一行算法思想:引入栈,保存终端输入的一行字符(逐行处理);遇‘#’退一格——出栈一次遇‘@’退一行——清栈步骤:1)初始化栈S2)读入字符ch3)ch!=EOF3.1) ch!=EOF && ch!=’\n’3.1.1)ch为‘#’:Pop(S, c), 转3.1.4)3.1.2)ch为‘@’:ClearStack (S) , 转3.1.4)3.1.3)ch为其他:Push (S, ch) , 转3.1.4)3.1.4)再读入字符ch,继续3.1)3.2) 处理完一行,清空栈3.3) 如ch!=EOF,读入字符ch,继续3)3.2.4 迷宫求解问题:找从“入口”到“出口”的路径(所经过的通道方块)分析:1)方块的表示——坐标,当前的状态(障碍、未走的通路、已走的通路);2)已走的路径:A.路径中各方块的位置及在路径中的序号;B.从各方块出发已探索的方向,注意不能重复(可约定按东、南、西、北的方向顺次探索);C.从当前方块无路可走时,将已走路径回退一个方块,继续探索其他未走的方向栈——存储已走的通道块3.2.5 表达式求值1、问题描述·只包含+, -, *, / 四个双目运算符,且算符本身不具有二义性;·三个运算规则→运算符优先关系(考虑算符本身的优先级和结合性);·只有'('==')','#'=='#';·假设输入的是一个合法的表达式。
2、算法思想引入OPTR和OPND两个栈初始:OPTR有一个元素'#',OPND为空读入一字符cc=='#':return(GetTop(OPND))c非运算符:Push(OPND,c)c运算符:t=GetTop(OPTR),比较t和c的优先关系t<c:Push(OPTR,c)t==c:Pop(OPTR, x)t>c:Pop(OPTR, theta); Pop(OPND, b); Pop(OPND, a);x=Operate(a, theta, b); Push(OPND, x);继续读入字符处理。
3.3 栈与递归的实现1、递归定义直接或间接地调用自身的函数,称为递归函数。
如右图所示,递归表现为:在该函数的所有可能执行路径中,存在一条由于调用自身或其它函数所导致的环路路径;为确保函数最终在有限的时间内执行完毕,必须在环路中存在一个出口,即当某种条件成立时,不必执行环路,而直接执行一条通向结束的非环路线。
2、递归应用1) 递归应用类型·递归定义的数学问题·具有递归特性的数据结构,其操作可以递归地表示·其它一些问题2) 递归应用的特点对于一个问题,当问题规模很大时,往往难于直接求解,此时:·将大问题分解成若干小问题·考虑如何利用这些小问题的解构成大问题的解·避免陷入考虑如何求解小问题这种分解、合成的方法就是递归求解中的递归方法;另外,递归应用要注意避免陷入死循环,递归必须有出口,即要确立递归的结束条件,给出此时的直接求解方法。
3) 递归应用举例Hanoi 塔问题3、递归的实现1) 系统的处理(1) 调用前现场保护,被调用函数的局部变量的空间分配,控制转移至被调用的函数入口。
(2) 调用后保存计算结果,释放被调函数的数据区,控制转移回调用处。
2) 实现——栈“后调用先返回”。
系统利用递归工作栈记录各层调用的现场信息。
3.4 队列的基本概念3.4.1 队列的抽象数据类型定义1、队列的逻辑特征1) 先进先出的线性表2) 队头:允许删除的一端;队尾:允许插入的一端3) 应用举例:操作系统的作业排队2、队列的抽象数据类型定义 ADT QueueADT Queue {数据对象:D={a i |a i ∈ElemSet, i=1,2,…,n, n ≥0}开始 结束形成了环数据关系:R={R1},R1={<a i-1,a i>|a i-1,a i∈D, i=2,3,…,n }基本操作:InitQueue(&Q)操作结果:构造一个空队列QDestroyQueue(&Q)初始条件:队列Q已存在操作结果:销毁队列QClearQueue(&Q)初始条件:队列Q已存在操作结果:将队列Q重置为空队列QueueEmpty(Q)初始条件:队列Q已存在操作结果:若Q为空队列,则返回TRUE,否则返回FALSEQueueLength(Q)初始条件:队列Q已存在操作结果:返回队列Q中数据元素的个数GetHead(Q,&e)初始条件:队列Q已存在且非空操作结果:用e返回Q中队头元素EnQueue(&Q, e)初始条件:队列Q已存在操作结果:插入元素e为Q的新的队尾元素DeQueue(&Q, &e)初始条件:队列Q已存在且非空操作结果:删除Q的队头元素,并用e返回其值QueueTraverse(Q, visit())初始条件:队列Q已存在且非空操作结果:从队头到队尾依次对Q的每个数据元素调用函数visit()。