数据结构习题课(栈和队列).pptVIP

  • 5
  • 0
  • 约4.51千字
  • 约 23页
  • 2017-12-13 发布于江苏
  • 举报
数据结构习题课(栈和队列)

第3章 栈和队列 3.1 栈 3.2 栈的应用举例 3.3 栈与递归的实现 3.4 队列 3.1 栈 ( Stack ) 1.定义:限定只在表的一端(表尾)进行 插入和删除操作的线性表 特点:后进先出(LIFO) 允许插入和删除 的一端称为栈顶 (top),另一端称 为栈底(bottom) 2. 栈的表示和实现 1)顺序栈——栈的顺序存储结构 2)链栈——栈的链式存储结构 3)静态分配整型指针 1)顺序栈——栈的顺序存储结构 限定在表尾进行插入和删除操作的顺序表 类型定义: p46 typedef struct { SElemType *base; SElemType *top; int stacksize; } SqStack; SqStack s; 说明: base称为栈底指针,始终指向栈底; 当base = NULL时,表明栈结构不存在。 top为栈顶指针 a. top的初始值指向栈底,即top=base b. 空栈:当top=base时为栈空的标记 c. 当栈非空时,top的位置:指向当前栈 顶元素的下一个位置 stacksize ——当前栈可使用的最大容量 几点说明: 栈空条件:s. top =s. base 此时不能出栈 栈满条件:s.top-s.base=s.stacksize 进栈操作:*s.top++=e; 或*s.top=e; s.top++; 退栈操作:e=*--s.top; 或s.top--; e=*s.top; 当栈满时再做进栈运算必定产生空间溢出, 简称“上溢”; 当栈空时再做退栈运算也将产生溢出,简 称“下溢”。 栈练习: 若借助栈由输入序列1、2、…n得到的输出序列为p1、p2、p3、…pn(它是输出序列的一个排列),则在输出序列中不可能出现这样的情形:存在着ijk使pjpkpi。(练习册p23) 讲解:举例(a、b、c)不可能-》c、a、b 某栈的输入序列为1、2、3…n,输出序列的第一个元素为n,则第i个元素为( ) A i  B N-i C N-i+1  D 哪个元素无所谓             (北航2002 -四分) 基本操作的实现(详见stack.c) 栈的初始化操作 p47 Status InitStack(SqStack S) 取栈顶元素 p47 Status GetTop(SqStack S, SElemType e) 进栈操作 p47 Status Push(SqStack S, SElemType e) 退栈操作 p47 Status Pop(SqStack S, SElemType e) 3.2 栈的应用 1. 数制转换 p48 算法3.1 2. 行编辑程序 p50 算法3.2 3. 表达式求值 p52 ~ p54 4. 把求n!的递归算法转化为非递归算法 1. 数制转换 p48 十进制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 要求:输入一个非负十进制整数,输出任意进制数 void Conversion() { InitStack(s); scanf(%d,%d,N,base); N1=N; while (N1) { Push(s,N1%base); N1 = N1/base; } while (!(StackEmpty(s)) { Pop(s,e);     printf(%c,e+48); } printf(\n); } 2. 行编

文档评论(0)

1亿VIP精品文档

相关文档