数据结构详细教案——栈和队列

合集下载

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

数据结构教案-详细版-第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章 栈和队列

数据结构教案第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_栈和队列

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.依次读入表达式中每个字符,若是操作数则进操作 数栈;若是运算符,则和运算符栈的栈顶运算符比 较优先权并作相应操作,直至整个表达式求值完毕

数据结构栈和队列教案

数据结构栈和队列教案
22
= 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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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()。

相关文档
最新文档