取栈顶 int GetTop( linkStack*S, StackData &x)( if( Stack Empty(S))return 0 x=S->top->data return 1 ■置栈空 int MakeEmpty( LinkStack*S)( While(s->top!=NULL& StackNode*p=S->top S->top=S->top->link; free(p);
▪ 取栈顶 int GetTop ( LinkStack *S, StackData &x ) { if ( StackEmpty (S) ) return 0; x = S->top->data; return 1; } ▪ 置栈空 int MakeEmpty ( LinkStack *S) { While(S->top!=NULL){ StackNode * p = S->top; S->top = S->top ->link; free(p); } }
栈的应用举例 数制转换 行编辑程序 迷宫求解 表达式求值
栈的应用举例 ▪ 数制转换 ▪ 行编辑程序 ▪ 迷宫求解 ▪ 表达式求值
数制转换 N=( n div d)×d+ N mod d 例如:(1348)10=(2504)8,其运算过程如下: n ndiy8 nmod 8 1348168 计算顺序一 16821 21 4052 2 输出顺序一
数制转换 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 0( Initstack(s); scanf (%od,N); while(ni Push(,n%8); N=N8; while(stackempty(s)i Pop(s, e) printf(%",e) }∥ conversion
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
行编辑程序 在用户输入一行的过程中,允许用户输入 出差错,并在发现有误时可以及时更正。 设立一个输入缓冲区,用以接受用户输入 的一行字符,然后逐行存入用户数据区;并假设 #”为退格符,“@”为退行符。 假设从终端接受两行字符 whli##ilr#(s##*s outcha(@putchar(s=#++); 实际有效行为: while( s) putchar(*s++);
行编辑程序 在用户输入一行的过程中,允许 用户输入 出差错,并在发现有误时可以及时更正。 设立一个输入缓冲区,用以接受用户输入 的一行字符,然后逐行存入用户数据区; 并假设 “#”为退格符,“@”为退行符。 假设从终端接受两行字符: whli##ilr#e(s#*s) outcha@putchar(*s=#++); 实际有效行为: while (*s) putchar(*s++);