数据结构第三章栈.pptVIP

  • 6
  • 0
  • 约9.22千字
  • 约 41页
  • 2020-01-13 发布于湖北
  • 举报
数据结构课程的内容 第三章 栈和队列 3.1 栈(Stack) 3.2 队列(Queue) 1. 定义: Q1:堆栈是什么?它与一般线性表有什么不同? Q2:顺序表和顺序栈的操作有何区别? Q3:什么叫“向上生成”的栈? “向下生成”又是何意? Q4:为什么要设计堆栈?它有什么独特用途? 例2:一个栈的输入序列为1,2,3,若在入栈的过程中允许出栈,则可能得到的出栈序列是什么? 例3:一个栈的输入序列是12345,若在入栈的过程中允许出栈,则栈的输出序列43512可能实现吗? 例4: 设依次进入一个栈的元素序列为c,a,b,d,则可得到出栈的元素序列是: A)a,b,c,d B)c,d,a,b C)b,c,d,a D)a,c,d,b 栈的存储结构 顺序栈 顺序栈的入栈操作——例如用堆栈存放(A,B,C,D) 顺序栈出栈操作——例如从栈中取出‘B’ 链栈的入栈操作和出栈操作(教材省略) 栈的应用--过程的嵌套调用 例1: 数制转换(十转N) ——P48 设计思路:用栈暂存低位值 例2:括号匹配的检验————P49 设计思路:用栈暂存左括号 例3 :表达式求值 —————P52 设计思路:用栈暂存运算符 例4:汉诺仪(Hanoi)塔———P55 设计思路:用栈实现递归调用 例1: 数制转换 Void conversion ( ){ InitStack ( S ); //构造空栈 scanf ( “%d” , N ); while ( N ) { Push( S, N%8 ); N=N/8; } while ( !StackEmpty ( S ) ) { Pop( S, e ); printf( “%d” , e ); } }// conversion 例2: 括号匹配的检验 例3: 行编辑程序 Void LineEdit ( ) { InitStack (S); //构造空栈S ch=getchar( ); //从终端接收第一个字符 while (ch!=EOF) { //EOF为全文结束符 while (ch!=EOF ch!=‘\n’) { switch (ch) { case ‘#’:Pop(S,C); break; //仅当栈非空时退栈 case ‘@’:ClearStack(S); break; //重置S为空栈 default :Push(S,ch) break; }//有效字符进栈,未考虑栈满情形 ch=getchar( ); //从终端接收下一个字符 } //将从栈底到栈顶的栈内字符传送至调用过程的数据区 ClearStack(S); //重置S为空栈 if (ch!=EOF) ch=getchar( ); } DestroyStack(S); }// LineEdit 作业 1、设有编号为1,2,3,4的四辆列车,顺序进入一个栈式结构的车站,具体写出这四辆列车开出车站的所有可能的顺序。 2、设用一维数组stack[n]表示一个堆栈,若堆栈中一个元素需占用length个数组单元(length 1),试写出其入栈、出栈操作的算法。 3、写出下列程序段的输出结果(栈的元素类型SElem Type为char)。 void main( ){ Stack S; Char x,y; InitStack(S); X=’c’;y=’k’; Push(S,x); Push(S,’a’); Push(S,y); Pop(S,x); Push(S,’t’); Push(S,x); Pop(S,x); Push(S,’s’); while(!StackEmpty(S)){ Pop(S,y);printf(y); }; Printf(x); } 4. 设一循环队列Queue,只有头指针fro

文档评论(0)

1亿VIP精品文档

相关文档