第3章+栈和队列1.pptVIP

  • 1
  • 0
  • 约5.5千字
  • 约 40页
  • 2019-09-06 发布于广东
  • 举报
第三章 栈和队列 3.1 栈 3.1.1 抽象数据类型栈的定义 3.1.2 栈的表示和实现 3.2 栈的应用举例 3.2.1 数制转换 3.2.2 括号匹配的检验 3.2.3 行编辑程序 3.2.4 迷宫求解 3.2.5 表达式求值 3.3 栈与递归的实现 3.4 队列 3.4.1 抽象数据类型队列的定义 3.4.2 链队列——队列的链式表示和实现 3.4.3 循环队列——队列的顺序表示和实现 3.5 离散事件模拟 3.1.1 栈 3.1.1 栈的定义及基本运算 栈(Stack)是限制在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom)。当表中没有元素时称为空栈。 假设栈S=(a1,a2,a3,…an),则a1称为栈底元素,an为栈顶元素。栈中元素按a1,a2,a3,…an的次序进栈,退栈的第一个元素应为栈顶元素。换句话说,栈的修改是按后进先出的原则进行的。因此,栈称为后进先出表(LIFO)。 例、一叠书或一叠盘子。 栈的抽象数据类型的定义如下:P45 a n a n-1 a2 a1 …… 栈顶 栈底 3.1.2 顺序栈 由于栈是运算受限的线性表,因此线性表的存储结构对栈也适应。 栈的顺序存储结构简称为顺序栈,它是运算受限的线性表。因此,可用数组来实现顺序栈。因为栈底位置是固定不变的,所以可以将栈底位置设置在数组的两端的任何一个端点;栈顶位置是随着进栈和退栈操作而变化的,故需用一个整型变量top来表示 top 7 6 5 4 3 2 1 -1 top用来指示当前栈顶的位置,通常称top为栈顶指针。顺序栈的类型定义如下: #define STACK_INIT_SIZE #define STACKINCREMENT typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack; 设S是SqStack类型的指针变量。若栈底位置在向量的低端,即s–base是栈底元素,那么栈顶指针s–top是正向增加的,即进栈时需将s–top加1,退栈时需将s–top 减1。s–top==s-base表示空栈, s–top-s-base ==stacksize表示栈满。当栈满时再做进栈运算必定产生空间溢出,简称“上溢”;当栈空时再做退栈运算也将产生溢出,简称“下溢”。上溢是一种出错状态,应该设法避免之;下溢则可能是正常现象,因为栈在程序中使用时,其初态或终态都是空栈,所以下溢常常用来作为程序控制转移的条件。 1、初始化栈 算法: 1.[构建栈] 1.1 分配空间并检查空间是否分配失败,若失败则返回错误 1.2 设置栈底和栈顶指针 1.3 设置栈大小 2.[算法结束] 2、取栈顶元素 算法: 1.[取元素] 1.1 判断栈是否是空栈,若是空栈则返回错误 1.2 通过栈顶指针获取栈顶元素 2.[算法结束] 3、入栈 算法: 1.[初值] 获取入栈元素e 2.[入栈] 2.1 判断栈空间是否存在,若无空间则重新分配更大的空间,并调整栈底,栈顶指针以及栈大小。 2.2 元素e压入栈中的栈顶位置 2.3 栈顶指针增加1 3.[算法结束] 4、退栈 算法: 1.[退栈] 1.1 判断栈是否为空,为空则返回错误。 1.2 获取栈顶元素e 1.3 栈顶指针减1 2.[算法结束] 3.1.3 链栈 栈的链式存储结构称为链栈,它是运算是受限的单链表,插入和删除操作仅限制在表头位置上进行.由于只能在链表头部进行操作,故链表没有必要像单链表那样附加头结点。栈顶指针就是链表的头指针。 链栈的类型说明如下: typedef struct stacknode{ datatype data struct stacknode *next } stacknode; typedef struct { struct st

文档评论(0)

1亿VIP精品文档

相关文档