当前位置:文档之家› 数据结构授课教案-第3章

数据结构授课教案-第3章

{
top= NULL;
}
⑵判栈空
intEmpty_LinkStack(LinkStacktop)
{
if(top==NULL)return 1;
else return 0;
}
⑶入栈
void Push(LinkStack&top,ElemTypex)
{ s=malloc(sizeof(StackNode));
后缀表示法在表示表达式时,每一个运算符都紧跟在它所操作的运算量之后的方法叫后缀表示法。
如A+B的后缀表示法为:AB+
中缀表达式求值
3.3栈与递归
1.递归的概念
递归函数:一个直接调用自己或通过一系列调用间接调用自己的函数称为递归函数。
2.递归设计
1)将问题用递归的方式描述(定义)
2)根据问题的递归描述(定义)编写递归算法
2.对每章习题中的重点及难点问题进行讨论,并解答学生有关的疑问。
{ if (Empty_SeqStack( s ) ) return 0; /*下溢*/
else {s.top--; x=s.data[s.top];return 1; }
}
⑸取栈顶元素
elemtypeGetTop(SeqStacks)
{
if (Empty_SeqStack( s ) ) return 0; /*栈空*/
}SeqStack;
定义2:
ElemTypes[MAXSIZE];
inttop;
⑴置空栈:首先建立栈空间,然后初始化栈顶指针。
voidinitStack(SqStack&s)
{
s.top= 0;
}
⑵判空栈
boolStackEmpty(SeqStacks)
{ if (s.top= = 0) return true;
else return (s.data[s.top] );
}
2.链栈
typedefstructnode
{ElemTypedata;
structnode *next;
}StackNode,*LinkStack;
LinkStacktop ;
⑴置空栈
voidInit_LinkStack(LinkStack&top)
ints[L],top; /*定义一个顺序栈*/
intx;
top =-1; /*初始化栈*/
while ( N )
{ s[++top]=N%r; /*余数入栈*/
N=N / r ; /*商作为被除数继续*/
}
while (top! =-1){
{ x=s[top--];
printf(“%d”,x);
}
structQNode*next;
}QNode,*QueuePtr;
typedefstruct{
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
3.4.3循环队列
如何判断循环队列
队空、队满?
有两种方法:
1)另设一个标志位以区分队空、队满。
2)少用一个存储单元,队满条件front=rear+1;
问题的递归描述(定义)包括两项:
基本项(终止项):描述递归终止时问题的求解;
递归项:将问题分解为与原问题性质相同,但规模较小的问题;
例n!的递归定义
基本项:n!=1当n=0
递归项:n!=n (n-1)!当n> 0
3栈与递归的执行过程
3.4队列
3.4.1队列的定义
一什么是队列
队列是限定仅能在表头进行删除,表尾进行插入的线性表
理论课




复习
分钟
主要教具
投影、黑板
讲授
分钟
教学方法
讲解、提问、示例
指导
分钟
教学手段
板书、课件
总结
分钟
备注
共8学时,其中2学时为习题课
注:课型一栏填写理论课、实验课、习题课等
授课内容
备注
第三章栈和队列
栈和队列是操作受限的线性表,在计算机科学和程序设计中有广泛的应用。
3.1栈
3.1.1栈的定义
栈(stack)是限定在表的同一端进行插入或删除操作的线性表。
山东轻工业学院
教师授课教案
课程名称:
数据结构(计科)
课程代码:
0301306
学分:
4.5
课程类别:
必修
开课单位:
信息科学与技术学院
授课班级:
授课教师:
杨春花
山东轻工业学院教务处制
授课时间
年月日星期第节
年月日星期第节
年月日星期第节
授课内Байду номын сангаас概要
第三章栈和队列
第一节 栈
栈的定义、结构特性和基本操作,栈的顺序存储结构表示和实现,栈的链式存储结构表示和实现。
进行插入或删除操作的一端称为栈顶(top),另一端称为栈底(bottom)。
当表中没有元素时称为空栈。
栈的操作特性:后进先出(last in first out)
设栈S=(a1,a2,…,an)。栈中元素按a1,a2,…,an的次序进栈,则退栈的第一个元素为an。
栈是又称为后进先出(last in first out)的线性表(简称LIFO结构)。
1数制转换
一个十进制N和其它进制数的转换的简单算法基于下列原理:
N=(n div d)*d+nmod d
(其中:div为整除运算,mod为求余运算)
例如(1348)10=(2504)8,其运算过程如下:
算法如下:
typedefintdatatype;
void conversion(intN,intr){
二队列的基本操作
1)初始化操作,InitQueue(Q);
2)判空操作,QueueEmpty(Q);
3)取队头元素操作,getHead(Q);
4)入队操作,EnQueue(Q,e) ;
5)出队操作,DeQueue(Q);
3.4.2链队列
typedefstructQNode{
ElemTypedata;
s->data=x;
s->next=top;
top=s;
}
⑷出栈
void Pop (LinkStack&top,datatype&x)
{if (top= =NULL) return ;
else { x = top->data;
p = top;
top = top->next;
free (p);
}
}
3.2栈的应用举例
第二节 栈的应用举例
数制转换,括号匹配的检验,迷宫求解,表达式求值等。
第三节 栈与递归
递归的概念,递归过程和递归工作栈;
第四节队列
队列的定义、结构特性和基本操作;链队列的类型定义、插入和删除;循环队列的类型定义、判空和满的条件、插入和删除。
目的要求
目的:理解栈和队列的定义和实现,理解它们的应用。
基本要求:理解栈和队列的表示和实现、栈和队列的应用、递归的概念和递归过程;掌握栈和队列的概念和结构特性。
从栈中删除(或称弹出)一个元素(删除),pop(S);
求栈顶元素的值,GetTop(S)。
3.1.2栈的表示与实现
1.顺序栈
用向量s()表示栈,附设top指向栈顶位置。
定义1:
#define MAXSIZE 1024
typedefstruct
{ElemTypedata[MAXSIZE];
inttop;
例:
1)火车调度,如进栈的车厢序列为1、2、3,则可能的出栈序列有哪些?
2)已知一个栈的入栈序列为1,2,3…,n,其输出序列为p1,p2,…,pn,若p1=n,则pi为?
3.1.1栈的基本运算
初始化空栈,InitStack(S);
判断栈是否为空栈,StackEmpty(S);
往栈中插入(或称推入)一个元素(入栈),push(S,e);
else return false;
}
⑶入栈
intPush (SeqStack&s,elemtypex)
{if (s.top= =MAXSIZE-1) return 0; /*上溢*/
else {s.data[s.top]=x;
s.top++;
return 1;
}
}
⑷出栈
intPop (SeqStack&s,datatype&x)


栈和队列的结构特性;栈和队列的应用;递归的执行过程。


循环队列判空和满的方法;递归的执行过程。
作业布置
习题3
参考书
1.数据结构题集(C语言版),严蔚敏,清华大学出版社,2002。
3. 数据结构、算法与应用-C++语言描述,(美)SartajSahni著,汪诗林等译,机械工业出版社,2002。
课型
}
2括号匹配的检验
假设表达式中充许括号嵌套,则检验括号是否匹配的方法可用“期待的急迫程度”这个概念来描述。例:
(()()(()))
3迷宫求解
4表达式求值
表达式由运算量、运算符以及其它定义符构成的,有完全确定意义的式子叫表达式
中缀表示法在表示表达式时,把运算符写在两个运算量之间的方法叫中缀表示法。如:A+B
InitStack(s);
while ( N ){
Push (s ,N % r );
N=N / r ;
}
while ( !EmptyStack( s ) ) {
相关主题