数据结构第三讲栈和队列.pptxVIP

  • 1
  • 0
  • 约3.05千字
  • 约 47页
  • 2022-05-06 发布于北京
  • 举报
王晓宁(07计算机) ;栈 ( Stack );栈的主要操作;栈的表示和实现;top;类型表示;判栈空 bool stackEmpty (STACK s) { return s.top == 0; //栈空返回TRUE } //否则返回FALSE 判栈满 int stackFull ( STACK s) { return s.top == MAXN; } //判栈满,满则返回TRUE //否则返回FALSE;初始化 void initStack ( STACK s) { //置空栈 s.top = 0; } 入 栈 void push(STACK s, char dt) { if (stackfull(s))cout “The stack is full!”; else s.data[s.top ++] = dt; };取栈顶元素 void getTop (STACK s, char x) { if ( stackEmpty(s) ) cout “Stack is empty!” endl; else x = s.data[s.top - 1]; } 出栈 void pop (STACK s, char x) { if ( stackEmpty(s) ) cout “Stack is empty!” endl; else x = s.data[-- s.top]; };栈的应用举例; N = (N div d)×d + N mod d 例如:(1348)10 = (2504)8 ,其运算过程如下: N N div 8 N mod 8 1348 168 4 168 21 0 21 2 5 2 0 2;void conversion () { initStack(S); scanf (%d,N); while ( N 0) { push(S, N % 8); N = N/8; } while (!stackempty(S)) { pop(S,e); printf ( %d, e ); } } // 进制转化函数;行编辑程序 在用户输入一行的过程中,允许 用户输入出差错,并在发现有误时可以及时更正。 设立一个输入缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区; 并假设“#”为退格符,“@”为退行符。 假设从终端接受两行字符: whli##ilr#e(s#*s) outcha@putchar(*s=#++); 实际有效行为: while (*s) putchar(*s++);;void lineEdit(){ initStack(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(); // 从终端接收下一个字符 } …代码略//将栈中元素输出 } };限于二元运算符的表达式定义: 表达式 ::= (操作数) + (运算符) + (操作数) 操作数 ::= 简单变量 | 表达式 简单变量 :: = 标识符 | 无符号整数 Exp = S1 + OP + S2 前缀表示法OP + S1 + S2 中缀表示法 S1 + OP + S2 后缀表示法 S1 + S2 + OP;例如: Exp = a ? b + (c ? d / e) ? f 前缀式: + ? a b ? ? c / d e f 中缀式: a ? b + c ? d / e ? f 后缀式: a b ? c d e / ? f ? + ;后缀表达式求值;算法;铁轨( TOJ 1036 ) ;每辆火车都从A方向驶入车站,再从B方向驶出车站,同时它

文档评论(0)

1亿VIP精品文档

相关文档