数据结构授课教-第3章.docVIP

  • 3
  • 0
  • 约1.03万字
  • 约 7页
  • 2016-10-16 发布于贵州
  • 举报
数据结构授课教-第3章

山东轻工业学院 教师授课教案 课程名称: 数据结构(计科) 课程代码: 0301306 学 分: 4.5 课程类别: 必修 开课单位: 信息科学与技术学院 授课班级: 授课教师: 杨春花 山东轻工业学院教务处制 授课时间 年 月 日 星期 第 节 年 月 日 星期 第 节 年 月 日 星期 第 节 授课内容概要 第三章 栈和队列 第一节 栈 栈的定义、结构特性和基本操作,栈的顺序存储结构表示和实现,栈的链式存储结构表示和实现。 第二节 栈的应用举例 数制转换,括号匹配的检验,迷宫求解,表达式求值等。 第三节 栈与递归 递归的概念,递归 队列的定义、结构特性和基本操作;链队列的类型定义、插入和删除;循环队列的类型定义、判空和满的条件、插入和删除。 目的要求 目的:理解栈和队列的定义和实现,理解它们的应用。 基本:栈和栈和队列的应用栈栈循环队列空和满方法 栈和队列是操作受限的线性表,在计算机科学和程序设计中有广泛的应用。 3.1栈 3.1.1栈的定义 栈(stack)是限定在表的同一端进行插入或删除操作的线性表。 进行插入或删除操作的一端称为栈顶(top),另一端称为栈底(bottom)。 当表中没有元素时称为空栈。 栈的操作特性:后进先出(last in first out) 设栈S=(a1,a2,…,an)。栈中元素按a1,a2,…,an的次序进栈,则退栈的第一个元素为an 。 栈是又称为后进先出(last in first out )的线性表(简称LIFO结构)。 例: 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); 从栈中删除(或称弹出)一个元素(删除),pop(S); 求栈顶元素的值,GetTop(S)。 3.1.2栈的表示与实现 1.顺序栈 用向量s()表示栈,附设top指向栈顶位置。 定义1: #define MAXSIZE 1024 typedef struct {ElemType data[MAXSIZE]; int top; }SeqStack; 定义2: ElemType s[MAXSIZE]; int top; ⑴ 置空栈:首先建立栈空间,然后初始化栈顶指针。 void initStack(SqStack s) { s.top= 0; } ⑵ 判空栈 bool StackEmpty (SeqStack s) { if (s.top= = 0) return true; else return false; } ⑶ 入栈 int Push (SeqStack s, elemtype x) {if (s.top= =MAXSIZE-1) return 0; /*上溢*/ else {s.data[s.top]=x; s.top++; return 1; } } ⑷ 出栈 int Pop (SeqStack s, datatype x) { if (Empty_SeqStack ( s ) ) return 0; /*下溢 */ else {s.top--; x=s.data[s.top];return 1; } } ⑸ 取栈顶元素 elemtype GetTop(SeqStack s) { if ( Empty_SeqStack ( s ) ) return 0; /*栈空*/ else return (s.data[s.top] ); } 2.链栈 typedef struct node { ElemType data; struct node *next; }StackNode,* LinkStack; LinkStack top ; ⑴ 置空栈 void Init_LinkStack( LinkStack top ) { top= NULL; } ⑵ 判栈空 int Empty_LinkStack(LinkStack top ) { if(top==NULL) return 1; el

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档